JS关于坐标和宽高属性的总结

JS中鼠标事件的坐标

鼠标事件,会产生多个坐标值,如 (offsetX,offsetY),(clientX,clientY),(screenX,screenY),(pageX,pageY)等,那么他们之间的区别在何处呢?

先看一张图,就可以得知答案。

offsetY: 就是事件源的偏移量。

clientY: 就是浏览器的可视区域的偏移量。

可视区域:指浏览器展示内容的部分,不包括工具栏和滚动条等。

pageY:是整个文档的偏移量。

如果没有滚动条,就跟clientY的值是一样的;

如果有滚动条,那么还有用clientY加上滚动条的距离。

screenY: 是电脑的屏幕的偏移量,当分辨率改变时,会发生改变。

y: 好像是clientY是一样的(我也不知道为什么,知情人可以给我说下)

当然除了上面这几种,还有layerX 和 layerY值,这里我没有深入研究,有兴趣的自己去试一试。

layerX好像是寻找使用了定位的祖先元素的偏移量,采用就近原则,如果祖先都没有定位,就是body

clientX、offsetX、pageX、screenX、x 与之对应

JS中Element的宽度和高度

最近写了一个轮播图,使用了一个offsetWidth属性,以前学习的时候,真没有注意这些,现在就处于懵逼的状态,对offsetWidth/Height、clientWidth/Height、scrollWidth/Height进行了一番总结。

注意事项:这是针对元素(Element)的属性,当然也包含body等。

代码的大致结构:

<style>
    .a {
        margin: 200px;
        width: 200px;   //注意这里
        height: 70px;
        padding: 0 10px;  //注意这里
        overflow: scroll;
        background-color: #34b7eb;
    }
</style>
<div class='a'>
    <span>dfasssssssssssssdsssssssssssssssssssssssssssssssssssssssssssssss</span>
</div>

获取a节点,并分别打印出各个的宽度:

那么这些宽度的数值到底是怎么出现的呢?继续看图,看图好说话。

上面大致画出各个宽度指的那段的宽度,还是很好看懂的。

clientWidth

  • 计算:width + padding-left + padding-right - 滚动条的宽度(17px)。
  • 理解:该属性不包含边框,滚动条,外边距等;如果有滚动条,需要减去其宽度。
  • 想象:可视区域

offsetWidth

  • 计算:width + padding-left + padding-right + border-left + border-right.
  • 理解:就是整个元素的几乎所有所有宽度的集合。(就是不包括外边距
  • 想象:整个展示的元素。

scrollWidth

  • 计算:内容 + 内边距 + 溢出的尺寸(这里的内容:指盒子里面的内容,不是盒子的width
  • 理解:实际的内容宽度和内边距,不包括边框,和滚动条
  • 如果没有溢出的内容,那么它的值跟clientWidth的值是一样的

clientHeight、offsetHeight、scrollHeight的道理是一样的

拓展

scrollTop 、scrollLeft

这个两个值,就是相对于文本原来的内容滚动了多少的距离(就是差值),纯粹个人理解。有误,请喷。

clientTop 、 clientLeft

clientTop = border-top-width

clientLeft = border-left-width

offsetTop、offsetLeft

offsetTop: 当前元素的上边框,找到定位祖先的距离;如果没有找到,就是body。

offsetLeft: 当前元素的左边框,找到定位祖先的距离;如果没有找到,就是body。

感觉就是layerX和layerY一样的(应该是的吧)。

window属性

window.innerWidth:浏览器视口宽度,包括滚动条,像素单位

window.innerHeight:浏览器视口高度,包括滚动条,像素单位

window.outerWidth:整个浏览器窗口宽度,全部 (工具栏等)

window.outerHeight:整个浏览器窗口高度,全部 (工具栏等)

window.screen.availHeight 屏幕可用高度

window.screen.availWidth 屏幕可用宽度(屏幕最大宽度), 包括滚动条+标题栏(以像素为单位)

用自己的电脑测试了下:

终于写完了,一边写一边学习,花了整整一个下午,真是太累了。希望对大家有用。

posted @ 2020-09-13 16:26  coder_xyf  阅读(252)  评论(0编辑  收藏  举报