【发布时间】:2014-12-23 23:25:15
【问题描述】:
我最近在我的项目中将 jquery-waypoints 从 2.x 升级到 3.x,发现我的很多代码都坏了。我的处理程序中对$(this) 的所有引用都必须更改为$(this.element),一旦我发现这是我的麻烦的原因,就很容易修复。
我无法弄清楚triggerOnce 选项发生了什么,这会阻止航点多次触发。知道为什么将其删除以及如何实现相同的功能吗?
【问题讨论】:
标签: jquery-waypoints
我最近在我的项目中将 jquery-waypoints 从 2.x 升级到 3.x,发现我的很多代码都坏了。我的处理程序中对$(this) 的所有引用都必须更改为$(this.element),一旦我发现这是我的麻烦的原因,就很容易修复。
我无法弄清楚triggerOnce 选项发生了什么,这会阻止航点多次触发。知道为什么将其删除以及如何实现相同的功能吗?
【问题讨论】:
标签: jquery-waypoints
我知道一个答案已经被标记为正确,但我想扩展一个简单的评论。
3.0 作为主要版本,进行了重大更改。其中之一是删除triggerOnce。在changelog 中注明。在destroy docs 中也提到了在处理程序末尾使用destroy 作为旧triggerOnce 的替代品。
以前,triggerOnce 与调用 destroy 并不完全相同,因为所有 Waypoint 方法都是在 jQuery 对象上调用的。这些 jQuery 对象中的元素可能附加了多个航路点,但是一旦创建它们就无法将它们分开。如果您调用destroy,则该元素上的所有航路点都会被破坏。然而,triggerOnce 选项在幕后以单个航路点为基础工作。现在 3.0 直接返回 Waypoint 类的实例,并且处理程序中的 this 是对 Waypoint 实例而不是元素的引用,triggerOnce 和调用 this.destroy() 结束处理程序之间没有区别。所以代码被删除了。
【讨论】:
$this.waypoint(counterUpper, { offset: '100%', triggerOnce: true }); 这样调用航路点怎么办?破坏函数适合哪里?
counterUpper
我想出了一个解决方案。将 this.disable() 添加到我的处理程序的末尾会在航点被触发后禁用它,从而防止再次调用它。我真的认为这应该记录在案。
【讨论】:
this.destroy,因为(在我的情况下)我知道我永远不会再使用那个实例了。
如果您需要禁用 jQuery 航点 (v3.0):
$('.my-waypoint').waypoint(function(direction){
// Do some stuff
this.destroy();
});
【讨论】: