JavaScript 获取元素的坐标详解

  最近突然看到了有关图片懒加载的问题,大致意思就是初始状态下页面只加载浏览器可视区域的图片,剩余图片在当浏览器可视区域滚动到其位置时才开始加载。貌似现在许多大型网站都有实现懒加载,所以我便就此问题思考了一下。首先第一个问题是浏览器没有相关的 API 方法可以检测某个元素是否在可视区域,那么就只能我们人工计算,所以这里就涉及到了元素长宽,滚动条位置的知识。本文涉及的到的知识有元素长宽 clientWidth/offsetWidth/scrollWidth 的区别、以及 clientTop/offsetTop/scrollTop 的区别,并给了获取元素坐标的源代码。

 一、 clientWidth、offsetWidth、scrollWidth 的区别

  通常大家获取元素的长宽的时候都会使用一些框架封装好的方法,比如 jQuery.prototype.width() ,这些框架使用起来方便快捷,不过其中涉及到的知识还是非常多的,关于元素的长宽,有多种的获取方法,其代表的实际意义也是不同的。

  简单来说可以使用下列公式:

  clientWidth = width(可视区) + padding

  offsetWidth = width(可视区) + padding + border

  scrollWidth = width(内容区) 

  假设有我们以下一个元素:

1 #test{
2 width: 100px;
3 height: 100px;
4   margin: 10px;
5   border: 10px solid #293482;
6   padding: 10px;
7   background-color: yellow;
8   overflow: auto;
9 }

 

clientWidth   offsetWidth   scrollWidth  

JavaScript 获取元素的坐标详解

 
   

JavaScript 获取元素的坐标详解

   

JavaScript 获取元素的坐标详解

 

JavaScript 获取元素的坐标详解

 

  以上 DEMO 是常规情况下的区别,下面加上一个滚动条我们们再来观察以下:

clientWidth   offsetWidth   scrollWidth  

JavaScript 获取元素的坐标详解

注意这里不包括滚动条的长度

   

JavaScript 获取元素的坐标详解

   

JavaScript 获取元素的坐标详解

这里实际上相当于内容的宽度

JavaScript 获取元素的坐标详解

 

 
 
 二、clientTop、offsetTop、scrollTop 的区别

  我们使用以下公式:

  clientTop = border

  offsetTop = 元素边框外围至父元素边框内围

  scrollTop = 元素可视区域顶部至实际内容区域的顶部

  给定以下两个元素 container 和 test

1 #container{
2   background-color: #F08D8D;
3   padding: 10px;
4 }
5 #test{
6   position: relative;
7   top: 10px;
8   width: 100px;
9   height: 100px;
10   margin: 20px;
11   border: 15px solid #293482;
12   padding: 10px;
13   background-color: yellow;
14 }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/7725245ec6fa33d3720f7762721443bb.html