【问题标题】:Jquery detect scroll onceJquery检测滚动一次
【发布时间】:2013-12-03 22:06:16
【问题描述】:

已阅读可以使用此行检测滚动:

$('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'); } );
 }

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

任何帮助将不胜感激。

大卫

【问题讨论】:

  • 在 jQuery 加载之前不是每 300 毫秒检查一次,是否可以将该函数添加到 ready 函数中? $(document).ready(function() { do stuff });
  • Kyle, $(document) 没有加载 Jquery 会导致错误。 jquery 在页面加载后加载(这是谷歌现在建议我们做的)。您的想法的一个例子将不胜感激

标签: jquery scroll detect


【解决方案1】:

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

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

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

只需将其绑定到 window 而不使用撇号。这会强制 jquery 将滚动事件直接绑定到 window DOM 对象,您的函数在滚动时正确触发。

例子:

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

【讨论】:

  • Google 告诉我们在页面加载后加载 jquery。这就是我正在做的事情。然后我正在设置一个计时器来检查 jquery 是否确实已加载。我正在检测鼠标移动或滚动以加载外部 js 文件。为什么我的滚动检测必须在就绪函数中?
  • 我更新了我的解释 - 希望它现在变得更容易理解
  • 您可以在加载 jQuery 时使用 onload 函数来运行任何依赖它的代码。如果您使用的是库,它应该有一种添加 onload 函数的方法。如果不是,可以使用<script onload="...">
猜你喜欢
  • 2014-02-08
  • 2013-09-26
  • 2012-01-03
  • 2013-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多