【发布时间】:2015-09-07 01:03:51
【问题描述】:
我的滚动事件出现了这种非常奇怪的行为,我似乎无法弄清楚为什么会发生这种情况或如何解决它。基本上我所拥有的是一个监听滚动的事件侦听器,但是 if 和 else 都在滚动时执行..
我得到了这个指令:
core.directive('offsetColor', [function() {
return {
restrict: 'A',
link: function(scope, element, attrs) {
$window.on('scroll', function() {
var windowY = $(window).scrollTop();
var elementY = element.offset().top - 60; // -60 to add site header height
if (elementY <= windowY) {
console.log('element is at top');
}
else {
console.log('no element is at top');
}
});
}
}
}]);
谁的任务是根据某些元素的 y 位置更改站点标题的颜色。
目前我已经在两个元素上设置了这个指令。
现在我对为什么会发生这种情况的简单猜测是因为我在 两个 元素而不是 一个 上设置了指令,因此滚动事件“循环”通过这两个元素元素并检查它们的 y 位置。所以其中一个元素在顶部,而另一个不在顶部,导致 if 和 else 都被执行。
我觉得我已经尝试了一切来阻止它同时执行,但我没有找到解决方案。
我在这里做错了什么?
【问题讨论】:
-
你可能需要一个外部范围变量来同步两个对象,所以如果一个去如果另一个不去
-
您的简单猜测似乎是正确的。两个 window.onscroll 处理程序将竞争,一个(最后一个附加的)将确定标题的颜色。您需要的是 一个 window.onscroll 处理程序,它读取所有相关元素的位置并根据您想要的任何规则确定标题的颜色。
-
@Roamer-1888 关于如何实现这一点的任何建议?
-
不是真的,因为我不理解
core.directive()包装器或restrict的含义。在原始 jQuery 中,您只需将$window.on('scroll', ...)包装在$.(function() {...})中。 -
@Chrillewoodz 您可以将逻辑放在一个父指令中,而不是元素本身的多个指令。请参阅下面的答案以获取示例。
标签: jquery angularjs scroll angular-directive