当用户从我的网站滚动到特定元素ID时,我想要弹出一个弹出窗口。
目前我设法做到这一点,但它在一个循环中工作,并且在执行一次后我无法停止该功能。
关注我的JS代码:
$(window).scroll(function() {
var executed = false;
if (!executed){
executed = true;
var hT = $('#scroll-to').offset().top,
hH = $('#scroll-to').outerHeight(),
wH = $(window).height(),
wS = $(this).scrollTop();
if (wS > (hT+hH-wH)){
<!--
window.setTimeout('window.location="javascript:showSuccessToast();"; ',2000);
// -->
}}
});
我无法理解为什么函数执行,执行&#34;&#34;变量变为真。 如何管理它只能触发一次 showsuccessToast ?
答案 0 :(得分:2)
每次触发事件时,您的函数都会从头开始执行 - 这包括executed
的初始化。换句话说,每次运行函数时,都会将executed
设置为false!
要解决此问题,您需要在函数外部提取变量定义:
var executed = false;
$(window).scroll(function() {
if (!executed) {
executed = true;
...
}
});
答案 1 :(得分:2)
另一种选择是使用unbind(),如以下JS代码所示:
$string = NCPDP_2016-10-28_15-31-10.csv;
答案 2 :(得分:1)
当滚动事件发生时,var执行总是设置为false。这意味着它在你的功能中毫无用处。
将已执行的事件放在事件函数之外。
var executed = false;
$(window).scroll(function() {
var hT = $('#scroll-to').offset().top,
hH = $('#scroll-to').outerHeight(),
wH = $(window).height(),
wS = $(this).scrollTop();
if (wS > (hT+hH-wH)){
if (!executed){ executed = true;
<!--
window.setTimeout('window.location="javascript:showSuccessToast();"; ',20);
// -->
}}
});