我有一个很好的小函数,可以让我知道元素是否在DOM中可见。
我每隔一秒使用一个间隔调用它并传递参数:
setInterval(function(){
if(isScrolledIntoView("#scene-1") == true){
//do something
}else{
//do something else
}
},1000)
function isScrolledIntoView(elem) {
var $elem = $(elem);
var $window = $(window);
var docViewTop = $window.scrollTop();
var docViewBottom = docViewTop + $window.height();
var elemTop = $elem.offset().top;
var elemBottom = elemTop + $elem.height();
return ((elemBottom <= docViewBottom) && (elemTop >= docViewTop));
}
它在chrome和firefox中运行良好。但是在IE中我在声明中得到了一个错误:
var elemTop = $elem.offset().top;
我通过这种方式将它转换为香草:
var elemTop = document.getElementById(elem.replace("#", "")).offsetTop;
如果没有工作,我也将整个事情改为vanilla js并传递了没有hash标签的id。
我收到错误0x800a138f - JavaScript runtime error: Unable to get property 'top' of undefined or null reference
我不明白为什么。我知道DOM上存在元素,拼写是正确的。
************** EDIT **********************