这里remove addeventlistener可以替换吗
如题,感觉也是怕scroll事件反复触发才设置的移除事件监听,那我想之前学的那个cklearTimeout的方法应该这里也行的通把。
var timer = null;
window.addEventListener('scroll',function(){
cleartimer(timer);
timer = setTimeout(function(){
if(isInVisibleArea(document.getElementById('lazyloading'))){
var script = document.createElemnet('script');
setTimeout(function(){
script.src = 'js/loadproduct.js';
},1000);
document.body.appendChild(script);
}}
},100),false)
不知道这样行不行
正在回答
同学你好,问题解答如下:
1.同学忽略了一个判断条件,如下:
div#product是页面最底部的一个元素,当页面还没有滚动到底部时,rect.top < window.innerHeight(元素到视口顶部的距离<窗口的高度)这个条件是不成立的。也就是说,只有滚动到底部,条件成立才会执行,所以不会产生同学所说的多次执行。而上个老师说的是setTimeout每次触发只会执行一次,这里只触发一次,所以可以不加清除定时器。
可以自己测试一下,加一个输出,在控制台中也会测试出来只执行了一次。
2.同学看错了,粘贴的代码不是加载图片,是加载了一个js文件,即loadProduct.js,同一个js文件只加载一次即可,不需要重复加载。所以加载完直接移除。
同学可以下载源码看一下,在前面有一段代码是加载图片的。这里和同学的想法是一样的,使用了定时器,且不能移除事件,因为后面的图片还需要继续执行它。再重新理解一下哦
祝学习愉快~
- 参与学习 人
- 提交作业 622 份
- 解答问题 6815 个
微信带火了小程序,也让前端工程师有了更多的展现机会,本阶段带你从移动基础知识的学习到webAPP开发,及小程序开发,让你PC端与移动端两端通吃。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星