【问题标题】:What happened to the triggerOnce option in Waypoints 3.0?Waypoints 3.0 中的 triggerOnce 选项发生了什么变化?
【发布时间】:2014-12-23 23:25:15
【问题描述】:

我最近在我的项目中将 jquery-waypoints 从 2.x 升级到 3.x,发现我的很多代码都坏了。我的处理程序中对$(this) 的所有引用都必须更改为$(this.element),一旦我发现这是我的麻烦的原因,就很容易修复。

我无法弄清楚triggerOnce 选项发生了什么,这会阻止航点多次触发。知道为什么将其删除以及如何实现相同的功能吗?

【问题讨论】:

    标签: jquery-waypoints


    【解决方案1】:

    我知道一个答案已经被标记为正确,但我想扩展一个简单的评论。

    3.0 作为主要版本,进行了重大更改。其中之一是删除triggerOnce。在changelog 中注明。在destroy docs 中也提到了在处理程序末尾使用destroy 作为旧triggerOnce 的替代品。

    以前,triggerOnce 与调用 destroy 并不完全相同,因为所有 Waypoint 方法都是在 jQuery 对象上调用的。这些 jQuery 对象中的元素可能附加了多个航路点,但是一旦创建它们就无法将它们分开。如果您调用destroy,则该元素上的所有航路点都会被破坏。然而,triggerOnce 选项在幕后以单个航路点为基础工作。现在 3.0 直接返回 Waypoint 类的实例,并且处理程序中的 this 是对 Waypoint 实例而不是元素的引用,triggerOnce 和调用 this.destroy() 结束处理程序之间没有区别。所以代码被删除了。

    【讨论】:

    • 感谢您提供额外的详细信息,并感谢您创建了一个出色的 jQuery 插件。但是,我只是想指出,在此处发布之前,我尝试搜索了很长一段时间以提及 triggerOnce。这是一件很难搜索的事情,因为 Waypoints 已经存在了一段时间,并且在仍然被 Google 索引但现在重定向到新主页的页面上提到了很多 triggerOnce。我认为文档中关于从 2x 迁移到 3x 的技巧的专门页面将非常有益。再次感谢!
    • Yaron,我同意可能需要迁移指南。它最初是作为另一个指南页面在石板上的,但我决定推迟,直到我看到人们在迁移中遇到的实际问题。喜欢这里的这个问题。 :)
    • @imakewebthings 如果我像 $this.waypoint(counterUpper, { offset: '100%', triggerOnce: true }); 这样调用航路点怎么办?破坏函数适合哪里?
    • @AlexanderSolonik Inside counterUpper
    【解决方案2】:

    我想出了一个解决方案。将 this.disable() 添加到我的处理程序的末尾会在航点被触发后禁用它,从而防止再次调用它。我真的认为这应该记录在案。

    【讨论】:

    • 我在处理程序的末尾使用this.destroy,因为(在我的情况下)我知道我永远不会再使用那个实例了。
    【解决方案3】:

    如果您需要禁用 jQuery 航点 (v3.0):

    $('.my-waypoint').waypoint(function(direction){
      // Do some stuff
      this.destroy();
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-16
      • 1970-01-01
      • 2010-11-17
      相关资源
      最近更新 更多