鼠标轮滚过快就执行了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>
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); }
你滚动过快,就相当于滚动很长,这个滚动的事件好像是滚动多长算一次滚动。如果你超过了,就算2次或者是多次滚动了吧。
那要怎么写啊
可以加个上次执行时间判断,如果上次执行的时间和这次执行的时间相差小于一个阈值(具体看方法体内的代码执行时间),那么可以不进行第二次计算。
具体怎么写啊?
@深蓝色梦想:
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;