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

逻辑不知道对不对,有点晕。

代码中的加粗区域是滚轮一下时得到isTop为false,然后再滚一次变成true然后执行ClearInterval?为什么在运行时滚一次就可以了?而不是滚两次?
window.onload = function(){
   var obtn = document.getElementById('btn');
   //获取页面可视区的高度
   var clientHeight=document.documentElement.clientHeight;
   var timer = null;
var isTop = true;

   window.onscroll=function(){
     var osTop=document.documentElement.scrollTop||document.body.scrollTop;
   if (osTop >= clientHeight){
       obtn.style.display="block"; //显示按钮
}else {
obtn.style.display="none"; //隐藏按钮
}
if (!isTop){
clearInterval(timer);
}
isTop = false;  
   };

obtn.onclick = function(){
//设置定时器
timer = setInterval(function(){
       var osTop=document.documentElement.scrollTop||document.body.scrollTop;
       var ispeed = Math.floor(-osTop / 6);
   //获取滚动条距离顶部的高度
   document.documentElement.scrollTop=document.body.scrollTop=osTop+ispeed;
   isTop = true;
   if(osTop == 0){
       clearInterval(timer);
       }
   },30);
   }

}


正在回答

1 回答

虽然每次onscroll都会isTop置为false,你每隔30秒都有一个setInterval都会将isTop置为false,所以不会在onscroll事件里执行clearInterval,只有在osTop === 0时才会clearInterval~


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

KokoTa 提问者

非常感谢!
2015-11-28 回复 有任何疑惑可以回复我~

举报

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

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

进入课程

逻辑不知道对不对,有点晕。

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