javascript - 滚动到某个点时无限次触发事件
问题描述
我有几个 div 一个在另一个之下,它们都有一个很大的高度,并且里面有一个元素被动画化。每个 div 内容的动画同时发生,但由于它们在另一个下方,只能看到第一个 div 元素的动画,当向下滚动到下一个时,动画已经发生并且它们看起来好像它们没有动画。
我在这里找到了一个类似的问题并找到了一个片段,我对其进行了修改,以便事件只发生一次(这是我想要实现的),并且由于在滚动时到达目标元素时发生事件,因此当条件为假,代码如下:
$(window).scroll(function() {
var chart2T = $('#chartdiv2').offset().top,
chart2H = $('#chartdiv2').outerHeight(),
wH = $(window).height(),
wS = $(this).scrollTop();
if (wS > (chart2T+chart2H-wH)){
do{
alert('secondChart on the view!');
}
while( 1 > 2 )
}
});
虽然我想确保事件只触发一次,但我无法实现它。你能借给我一些帮助吗?谢谢。
解决方案
如何使用标志来说明事件是否已经被触发?
var alertShown = false;
$(window).scroll(function() {
var chart2T = $('#chartdiv2').offset().top,
chart2H = $('#chartdiv2').outerHeight(),
wH = $(window).height(),
wS = $(this).scrollTop();
if (wS > (chart2T+chart2H-wH) && !alertShown){ // check if alert was not already triggered
do{
alert('secondChart on the view!');//alert triggered once
alertShown = true; // now it will no longer trigger
}
while( 1 > 2 )
}
});
这个想法是你要alertShown
在函数之外有一个范围scroll
,这样即使在函数结束后它的状态也存在。
推荐阅读
- java - JDK1.8 运行 javac 后留在目录中的文件
- firebase - 带有子域的 Firebase 动态链接
- ubuntu - 注册 Twilio 电话号码时出现 ngrok 错误
- python - 如何绘制 pd.crosstab() 表?
- qt - 我可以保留传递给 QJSEngine 的 QObject 的所有权吗?
- html - 为什么当行上没有更多空间时浮动元素被推到容器外面而不是被推到第二行?
- python - Hogwild 的 PyTorch 多处理错误
- reactjs - REACT JS中的Array.find函数无法读取未定义的属性
- c++ - 从数据文件中读取后出现分段错误
- c++ - 带有字符串和 c 字符串的 C++ 中的临时实例