Jquery检测一次滚动

时间:2013-12-03 22:06:17

标签: jquery scroll detect

已经读过可以用这一行检测滚动:

$('window').one('scroll', function() {  } );

如果有此内联代码:

var TimeVariable=setInterval(function(){ DoJQueryStuff() },300);

function DoJQueryStuff()
 {
 if(typeof jQuery == "undefined") return;
 window.clearInterval(TimeVariable);
 $('body').one('mousemove', function() { alert('mouse'); } );
 $('window').one('scroll', function() { alert('scroll'); } );
 }

在加载JQuery之前,每300毫秒调用一次DoJQueryStuff。 如果我将鼠标移动到屏幕上的任何位置,我会收到“鼠标”警报。 如果我向下滚动,我不会收到“滚动”警报。 即它没有开火。

非常感谢任何帮助。

大卫

1 个答案:

答案 0 :(得分:6)

首先请使用jquery ready http://api.jquery.com/ready/方法。我不想说你的实现是错误的,但比jquery ready方法慢。

你的滚动功能基本上没有被执行,因为你将它绑定到错误的对象。 当您使用jquery引用window对象时,请不要将其包含在叛逆者中。

如果你这样做,jquery将实习调用document.getElementsByTagName并找不到标记名window,因为window不是window.document节点的子节点。因此,您的滚动检测功能永远不会被触发,因为jquery无法将eventListener绑定到您的提交元素标记名。

简单地将其绑定到window而不含叛逆者。这会强制jquery将scroll事件直接绑定到window DOM对象,在该对象中,您的函数在滚动时被正确触发。

示例:

$(window).ready(function(){
    $(this).one('mousemove', function() { 
        // mouse move
    }).one('scroll', function(){
        // scroll 
    });
});