为了账号安全,请及时绑定邮箱和手机立即绑定

关于运行定时器时候手动滚动滚动条停止定时器问题!

请问一下!设置istop = true  

在运行istop = true 这表示在定时器运行的时候不启动

if(!istop){clearInterval(timer)}

但是如果,用户自己滚动滚动条的话·  就触发window.onscroll = function(){if(!istop){clearInterval(timer)}

istop = false}

这个函数·  而这个函数里面istop是false 然后传给if里面取反· 变成true 符合条件· 进行清除定时器· 

请问大家,这边的思路是这样子的吗??

正在回答

2 回答

1.你描述的不太清楚。我开始也不懂,试了几次才明白。是这样的,最初定义变量var isTop=true,是为了方便后面分辨它是由点击按钮设置定时器来滚动还是鼠标来滚动,首先,我们知道刚打开的页面按钮不可见,根本不可能点击到按钮,此时最初的isTop为true,然后就需要我们用鼠标操作滚动,这时就触发了Window.onscroll事件,里面会做判断,此时isTop仍未改变,不符合if(!isTop)也就是isTop为false的条件,就不会关定时器,后一句就把false赋给isTop了,注意这里前面顺序不能颠倒,否则先赋值的话就直接关定时器,后面点击onclick事件的同时会一起触发onscroll事件,那么会造成滚动条滚一下停一下(因为你前面顺序不对关了定时器),不能自动滚到top为0的位置

2.点击按钮同时也会触发onscroll事件但是仍旧不会关闭定时器 (因为那条判断在),里面仍为true,此时你再滚动触发onscroll事件,里面会赋值为false,你再点击赋值为true,如此循环,互不冲突。

0 回复 有任何疑惑可以回复我~
#1

不风的羁

你好,我把那个isTOP判断给删了,功能还是正常的呀
2018-05-22 回复 有任何疑惑可以回复我~

window.onload = function(){
                var obtn = document.getElementById('btn');
    //获取页面可视区的高度
    var aclientHeight=document.documentElement.clientHeight;
    var timer = null;
    var isTop = false;
    window.onscroll=function(){
        var osTop=document.documentElement.scrollTop||document.body.scrollTop;
        if (isTop){
            clearInterval(timer);
        }
        isTop = true;
        if (osTop >= aclientHeight){
            obtn.style.display="block";
        }else {
            obtn.style.display="none"; //隐藏按钮
        }
    }


你可以把isTop设置为false  意思是没有人为滚动的时候   isTop为true的时候就是人为滚动的时候,   当执行第一次onscroll的时候  其实isTop还是为false  第二次再执行onscroll的时候  isTop就变为True了  因为onscroll这个函数里面有设置isTop = true;   滚动一下滚轮 其实onscroll这个函数会执行20多次  第二次开始isTop就变为True,所以就清除定时器了

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
回到顶部效果
  • 参与学习       44211    人
  • 解答问题       206    个

回到顶部网站不可缺少的一部分,用JS实现炫酷拉风的回到顶部效果

进入课程

关于运行定时器时候手动滚动滚动条停止定时器问题!

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信