老师,定时器执行这个到底是怎么回事呢?
function byId(id) { if (typeof(id) === 'string') { return document.getElementById(id); } else { return id; } } console.log(byId('main')); var timer = null; var index = 0; var div = byId('banner').getElementsByTagName('div'); var len = div.length; //给小圆点绑定事件; var dot = byId('dot').getElementsByTagName('span'); function slideImg() { var main = byId('main'); main.onmouseover = function() { //鼠标滑过图片,清除定时器 if (timer) { clearInterval(timer); } } //没有滑过,哪里来的离开呀!所以必须滑过,才能离开! //自动触发onmouseout事件 //这是一个函数表达式,声明不能提前; main.onmouseout = function() { timer = setInterval(function() { index++; if (index >= len) { index = 0; } changeImg(); },3000); //经过3秒执行一次! //遍历所有的点击事件,绑定点击事件,点击圆点切换图片, //利用立即执行函数来解决闭包带来的索引永远是最后一位的问题; } main.onmouseout(); //改变index为当前span索引; for (var j = 0; j < len; j++) { (function(i) { dot[i].onclick = function() { index=i; changeImg(); this.className='active'; } }(j)) } } function changeImg() { //遍历banner下所有的div以及dot下所有的span标签,将div隐藏,将span上的类清空; for (var i = 0; i < len; i++) { div[i].style.display = "none"; dot[i].className=""; } div[index].style.display = "block"; dot[index].className='active'; } slideImg(); 我使用debug调试的时候,发现一开始并不会执行定时函数setInterval里面的函数,定时器执行的时候是不是 一开始不会执行里面的东西,而是3秒之后再执行里面的东西?假如立刻执行里面的东西,那么进入for循环之后 index就是1,那么第一张图片永远就不会显示出来了..所以我理解的是第一张图片因为设置了类.slide-active, 所以会显示出来,等到3秒之后执行定时器里面的函数,调用changeimg函数,是不是这样子呢?
0
收起
正在回答 回答被采纳积分+1
1回答
厚德载物ddd
2019-03-28 11:40:04
你好同学,首先需要理解onmouseout和onmouseover这两个事件.
onmouseout:在鼠标指针移动到目标元素外时触发,可以简单的理解为只要鼠标指针不在目标元素上就触发.onmouseover:在鼠标指针移动到指定的对象上时触发.那么,观察代码:
main.onmouseover = function() { //鼠标滑过图片,清除定时器 if (timer) { clearInterval(timer); } } main.onmouseout = function() { timer = setInterval(function() { index++; if (index >= len) { index = 0; } changeImg(); },3000); }
这段代码表示的是,只要鼠标没有放在目标的元素上,就触发onmouseout事件,执行setInterval,实现轮播图自动轮播,当把鼠标放在目标元素上,就会触发onmouseover事件,执行 clearInterval(timer),清除定时器,停止图片轮播.
祝学习愉快~
前端小白入门系列课程
- 参与学习 人
- 提交作业 11218 份
- 解答问题 36713 个
从一个不会编程的小白到一个老司机是需要过程的,首先得入门,学习基础知识,然后才能进阶,最后再到精通,本专题是你走进前端世界的不二选择!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星