Intersection Observer API 提供了一种异步检测目标元素与祖先元素或 viewport 相交情况变化的方法。 过去,要检测一个元素是否可见或者两个元素是否相交并不容易,很多解决办法不可靠或性能很差。然而,随着互联网的发展,这种需求却与日俱增,比如,下面这些情况都需要用到相交检测:
- 图片懒加载——当图片滚动到可见时才进行加载
- 内容无限滚动——也就是用户滚动到接近内容底部时直接加载更多,而无需用户操作翻页,给用户一种网页可以无限滚动的错觉
- 检测广告的曝光情况——为了计算广告收益,需要知道广告元素的曝光情况
- 在用户看见某个区域时执行任务或播放动画
function exposeHomeZpt(){
var zptList = $('#home_zpt li')
if(IntersectionObserver){
var io = new IntersectionObserver((entries) =>{
for(var k = 0; k < entries.length;k++){
if(entries[k].intersectionRatio >= 0.5){
reportLog({
"resource_type":"zpt",
"resource_id":entries[k].target.getAttribute('data-zptid'),
"event_type":"display",
"event_extend":{
"request_id": entries[k].target.getAttribute('data-requestid'),
"from": "首页-推荐"
}
})
io.unobserve(entries[k].target)
}
}
}, {
threshold: 0.5,
})
zptList.each(function(){
io.observe(this)
})
}
}
function reportLog(data){
$.ajax({
url: AppOrigin + "/log",
type: 'POST',
cache: false,
data: JSON.stringify(data),
contentType: 'application/json; charset=utf-8',
processData: false
})
}