dom元素的getBoundingClientRect()方法返回其大小及其相对于视口的位置,直白一点的说法就是返回它的宽(width)、高(height)以及盒子左上角或右上角距离浏览器可视区域的上部的距离(top)、盒子左下角或右下角距离浏览器可视区域上部的距离(bottom)、盒子左上角或右下角距离浏览器可视区域左部的距离(left)、盒子右上角或右下角距离浏览器可视区域左部的距离(right),借用一幅图来直观的感受下。
本例用到的代码结构如下
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>getBoundingClientRect的使用</title> <style> * { margin: 0; padding: 0; } .demo { margin: 50px; padding: 50px; width: 200px; height: 200px; background-color: red; border: 10px solid blue; } </style> </head> <body> <div class="demo"> </div> <script> var div = document.querySelector('.demo'); var rect = div.getBoundingClientRect(); console.log(rect); </script> </body> </html>
运行效果如下:
页面没有产生滚动条的情况下,得到的结果如下图所示:
页面在产生滚动条的情况下,得到的结果如下图所示:
对比两种结果可以发现,元素相对视口的位置会随着页面的滚动发生变化,即它们是一个相对值。
那么怎么获得与滚动无关,元素相对于网页左上角的定位值呢?
公式很简单,根据上面两个例子的分析很容易得出如下公式:
元素距视口的固定值为 top + window.scrollY/left + window.scrollX
window.scrollX:表示文档从左侧开始滚动的像素值,window.scrollY:表示文档从顶部开始滚动的像素值。