Go to comments

渡一微课 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/






Leave a comment 0 Comments.

Leave a Reply

换一张