渡一微课 202505
1、获取元素的尺寸
1. 直接读元素的样式
getComputedStyle(dom).width
把 dom 元素传进去,就可以直接拿到样式上的宽度或高度
这种方式拿的尺寸读取是 CSSOM树,这种尺寸不能反应界面上的尺寸,除非特殊情况最好别用
比如,设置元素的100px,
设置了padding 和 border 后尺寸是不一样的,
或者元素是弹性项目会被压缩或拉伸,100px 只是基线而已
dom.style.width
读取的不是 CSSOM 树的尺寸,是 DOM 树的尺寸,
如果元素的 style 属性上面没有写 width,写到 css 样式里面,这种方式读不出来,而且读出来也不一定是最终的情况,我们更多是使用的是下面四个
2. 几何尺寸
clientWidth
表示 content + padding,不包含 border边框 和 scroll滚动条
dom.offsetWidth
表示 content + padding + scroll + border
如果元素没有边框和滚动条,尺寸跟 client 是一样的
scrollWidth
visible + invisible 表示的不是这个元素本身的尺寸,而是元素里面那些东西的尺寸,
通常使用了滚动条后,元素里面的东西比较多,就出现了滚动条,获取的是元素内部滚动区域的高度和宽度,
如果这个元素没有滚动条,也没有边框,它的尺寸跟 client 是一样的
上面三种读取的是 Loyout Tree 布局树,布局树包含的是元素的几何信息
3. 人眼可见的尺寸
const rect = dom.getBoundingClientRect()
它是 dom 元素里面的一个方法,返回一个对象,对象里面包含一些属性 rect.width
这种方式获得到的尺寸不是 Loyout Tree 布局树了,是最后 GPU 画到屏幕上的尺寸,跟渲染主线程没有关系了,
比如应用 transform 旋转、放大变换后,最终呈现在屏幕上的尺寸,和 Loyout Tree 布局树又有差异,
如果没有变换和上面三个布局树得到的尺寸是一样的
by:
https://www.bilibili.com/video/BV1FXs5ewEJR/
https://www.bilibili.com/video/BV1HX4y1H7hA/
2、copy 的监听和解禁
监听 copy 事件(也可以注册到 body 元素上),然后在网页中不管用哪种复制都会触发该事件
window.addEventListener("copy", (e) => {
alert("不能复制")
});阻止了默认行为后,现在就不能复制网页的内容了
window.addEventListener("copy", (e) => {
e.preventDefault();
alert("不能复制")
});可以在剪切板里面设置一些其他内容,
比如复制后粘贴变成“不能复制,打钱”,然后还可以做一些提示
window.addEventListener("copy", (e) => {
e.preventDefault();
e.clipboardData.setData("text/plain", "不能复制,打钱");
alert("不能复制")
});如何解禁?
1. 右键检查元素
2. Elements 选项里面找到选中要复制的元素,然后选中右边的 Event Listeners,
3. 在 Event Listeners 下面列表找到 copy 事件,del 删除掉该事件即可
by: https://www.bilibili.com/video/BV1RLN3eFEfh/
3、JS中的文档注释
文档注释的函数,使用函数的时候编辑器会有提示
@param 该关键字表示参数的意思,{*}表示参数可以接收任何类型,还可以在后面写上参数的注释
@return 表示函数返回值,{Function}返回的类型也是一个函数
@author 表示作者,还可以写邮箱
@license 表示版权
/**
* 函数防抖
* @author Yuan <123@mail.com>
* @license MIT
* @param {Function} func 防抖的目标函数
* @param {Number} duration 函数执行前等待的时间
* @return {Function} 返回一个防抖后的函数
*/
function debounce(func, duration = 1000){
}
debounce();@example 表示示例,使用函数的时候,会显示该怎么用的
/**
* 获取指定范围的随机整数
* @param {number} min 随机数的最小值
* @param {number} max 随机数的最大值
* @return {number}
* @example
* getRandom(1, 10); // 获取[1, 10]之间的随机整数
*/
function getRandom(min, max){}
getRandom()有的时候参数可以能是一个对象,可以在该对象后面依次写上对象里面的属性,和属性的类型
/**
* 网络请求
* @param {Object} options 配置对象
* @param {string} options.url 请求地址
* @param {'GET'|'POST'} options.method 请求地址
* @param {Object} options.body
* @param {Object} options.headers
*
*/
async function request(options){}
request({
method: 'POST'
})文档注释是一套标准的写法,可以跟很多工具进行互动,比如,把我们写文档注释转,生成成一个文档
1. 全局安装 npm i -g jsdoc
2. jsdoc ./ 使用 jsdoc 命令,把当前目录里面的文档注释提取出来
3. 完成后当前目录有一个 out 文件,里面有一些页面
https://www.bilibili.com/video/BV17u411H7uG/
4、判断奇偶数
偶数:除以2余数为0,或个位数为 0、2、4、6、8
奇数:除以2余数为1,或个位数为 1、3、5、7、9
判断是否是奇数
/**
* 判断奇数
* @param {number} n 判断的数字
* @return {boolean} 奇数为true,偶数为false
*/
function isOdd(n){
return n % 2 === 1 || n % 2 === -1;
}
console.log(isOdd(1)); // true
console.log(isOdd(2)); // false
console.log(isOdd(3)); // true
console.log(isOdd(14.10)); // false下面这两种写法不行
function isOdd(n){
return n % 2 === 1;
}
function isOdd(n){
return n % 2 !== 0;
}by https://www.bilibili.com/video/BV1Zr421n7WT
