埋点曝光需求要求在页面在用户的视野中就发送一个曝光日志,一个页面的一个模块最多发送一次,也就是首次曝光才发送,之后在进入视野中就不用在发曝光日志了
一、当看到这个需求的时候我们第一点肯定想到要监听滚动事件
1 | window.addEventListener('scroll', function(){ |
二、然后优化下滚动事件,加上throttle。
1 | window.addEventListener('scroll',newScroll(exposure,500)); |
三、然后优化下滚动事件,加上throttle。注意scroll监听的匿名事件是不可以取消监听事件的,我想要的是页面中所有需要曝光的地方曝光结束后,取消监听事件
1 | //需要曝光的点 |
tips: 这里用到了getBoundingClientRect文章出处
getBoundingClientRect用于获得页面中某个元素的左,上,右和下分别相对浏览器视窗的位置。getBoundingClientRect是DOM元素到浏览器可视范围的距离(不包含文档卷起的部分)。
该函数返回一个Object对象,该对象有6个属性:top,lef,right,bottom,width,height;
1.兼容性
getBoundingClientRect()最先是IE的私有属性,现在已经是一个W3C标准。所以你不用当心浏览器兼容问题,不过还是有区别的:IE只返回top,lef,right,bottom四个值,不过可以通过以下方法来获取width,height的值
1 | document.getElementById(value.selector).offsetHeight(); |
1 | var ro = object.getBoundingClientRect(); |