首页 新闻 搜索 专区 学院

为什么ie下的onscroll事件轮滚过快就执行了2次呢?

0
[已解决问题] 解决于 2012-08-23 10:34

鼠标轮滚过快就执行了2次document.title +=ss;
如果点击滚动条手动拉动的话就正常
有什么办法解决吗?

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>

<style type="text/css">
*{ margin:0;padding:0; }
#wrap{ width:980px;position:relative;margin:0 auto; }
body{ height:1100px }
</style>
</head>
<body>

<script type="text/javascript">

    function log(i){ return console.log(i); } 
    var $ = function(id){ return typeof id == "string" ? document.getElementById(id) : id };
    window.onscroll = function(){
                var tops =0;
                if(document.body.scrollTop){
                    tops = document.body.scrollTop;
                }
                else{
                    tops = document.documentElement.scrollTop;
                }
                
                if(tops >= document.documentElement.scrollHeight - document.documentElement.clientHeight){
                    var ss="1";
                    document.title +=ss;
                }
    }
    
</script>
</body>
</html>

 

 

深蓝色梦想的主页 深蓝色梦想 | 初学一级 | 园豆:6
提问于:2012-08-11 16:20
< >
分享
最佳答案
2
var throldHold = 20; //两次scroll事件触发之间最小的事件间隔
window.onscroll = function(){
    if(arguments.callee.timer) clearTimeout(arguments.callee.timer);
    arguments.callee.timer = setTimeout(function(){
        var tops =0;
        if(document.body.scrollTop){
            tops = document.body.scrollTop;
        }
        else{
            tops = document.documentElement.scrollTop;
        }
        
        if(tops >= document.documentElement.scrollHeight - document.documentElement.clientHeight){
            var ss="1";
            document.title +=ss;
        }
    },throldHold);
}
 
奖励园豆:5
程序猿小卡 | 菜鸟二级 |园豆:386 | 2012-08-22 22:05
其他回答(2)
0

你滚动过快,就相当于滚动很长,这个滚动的事件好像是滚动多长算一次滚动。如果你超过了,就算2次或者是多次滚动了吧。

chenping2008 | 园豆:9836 (大侠五级) | 2012-08-12 16:54

那要怎么写啊

支持(0) 反对(0) 深蓝色梦想 | 园豆:6 (初学一级) | 2012-08-12 20:57
0

可以加个上次执行时间判断,如果上次执行的时间和这次执行的时间相差小于一个阈值(具体看方法体内的代码执行时间),那么可以不进行第二次计算。

梧枫 | 园豆:185 (初学一级) | 2012-08-13 09:23

具体怎么写啊?

支持(0) 反对(0) 深蓝色梦想 | 园豆:6 (初学一级) | 2012-08-13 14:53

@深蓝色梦想: 

 1 if(tops >= document.documentElement.scrollHeight - document.documentElement.clientHeight){
    // FK IE,这里可能会执行两次
2 var thisTime = new Date().getTime(); 3 if (thisTime - test.lastTime < 50) { 4 test.lastTime = thisTime; 5 return; 6 } 7 var ss="1"; 8 document.title +=ss; 9 } 10 test.lastTime = thisTime;
支持(0) 反对(1) 梧枫 | 园豆:185 (初学一级) | 2012-08-13 15:09
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册