关于计时器的一个问题

关于计时器的一个问题

我在免费课程那里学习了开发tab选项卡,我开发完后发现一个现象:

当鼠标移进页签时,清除计时器,当鼠标离开页签时,启动计时器,这是课程的正常逻辑。

但我想到一个用户体验,当鼠标移进某个页签时,下面会出现该页签对应的内容,那如果我想当鼠标放到该页签对应的内容上,计时器也不启动,只有当鼠标完全离开页签和对应的内容时,计时器才重新启动,这算是一个小bug吗?如果按照我的逻辑,那该如何加上鼠标放到该页签对应的内容上,计时器也不启动这个逻辑?

function tab() {

    //index值表示当前默认显示的第1个索引

    var index = 0;

    var timer = null;


    //获取所有的选项卡和需要切换的内容

    var tabNavUl = $('tab-nav-ul').getElementsByTagName('li');

    var tabNavContent = $('tab-nav-content').getElementsByTagName('div');

    //添加鼠标滑动切换选项卡事件

    for (var i = 0i < tabNavUl.length; i++) {

        tabNavUl[i].value = i;

        tabNavUl[i].onmouseover = function () {

            clearInterval(timer);

            // 清除所有li上的active类名

            chaneOption(this.value);

        }

        tabNavUl[i].onmouseout = function () {

            //当鼠标离开选项卡时,再次启动计时器

            timer = setInterval(autoPlay2000);

        }

    }

    //清除定时器

    if (timer) {

        clearInterval(timer);

        timer = null;

    }

    //添加定时器,改变当前显示的索引

    timer = setInterval(autoPlay2000);

    //把定时器的脚本封装成一个函数

    function autoPlay() {

        index++;

        if (index >= tabNavUl.length) {

            index = 0;

        }

        chaneOption(index);

    }


    //封装一个函数,把遍历语句和类名语句放到该函数内

    function chaneOption(curIndex) {

        for (var j = 0j < tabNavUl.length; j++) {

            tabNavUl[j].className = '';

            tabNavContent[j].className = '';

        }

        tabNavUl[curIndex].className = 'active';

        tabNavContent[curIndex].className = 'current';

        index = curIndex;

    }

}

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,以源码为例,直接给外层盒子添加鼠标移出事件,开启定时器即可,如下:

http://img1.sycdn.imooc.com//climg/609626c20976f33913250548.jpg

鼠标离开标签和对应的内容时,才会再次开启自动轮播,效果如下:

http://img1.sycdn.imooc.com//climg/609628a20a16845504640125.jpg

本站的教学服务只包含站内视频内容问题解答、站内习题问题解答、站内作业问题解答、站内测试题问题解答以及站内产品使用问题解答。

同学现在还刚入门,掌握的技术还不够全面,基础相对比较薄弱,不适合扩展课外练习。建议同学自行完成与自身能力相匹配的拓展练习。并且合理安排时间,把学习的重点放在课程内容本身。打好基础,再去做这个练习,就会更容易理解,轻松独立完成了。

本次老师破例为同学讲解一下思路,下不为例哦。

祝学习愉快~

好帮手慕慕子 2021-05-08 10:29:41

同学你好,只有同学部分代码,而且,老师也不清楚同学说的免费课具体讲解的是什么内容,无法准确的定位与解决问题。可以将你写的完整代码全部粘贴过来,老师帮助测试。

另外,同学也可以直接在对应的免费课下进行提问,与一起学习该课程的小伙伴一起讨论哦。

祝学习愉快~

  • 提问者 leepulse #1

    https://www.imooc.com/learn/176

    在这个免费课程上,我提问了,也看了该课程的小伙伴的提问,都没有确实的一个答案

    我写的代码也是跟这个课程的讲师一起的代码

    2021-05-08 12:13:44
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师