如何只运行一次JS函数?

时间:2016-11-04 10:36:50

标签: javascript jquery function scroll

当用户从我的网站滚动到特定元素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

3 个答案:

答案 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);
     // -->
 }}
 });