簡體   English   中英

如何只運行一次JS函數?

[英]How to run JS function only one time?

當用戶從我的網站滾動到特定元素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);
     // -->
  }}
  });

當“已執行”變量變為true時,我不明白為什么要執行該函數。 我如何管理它只觸發一次showscessToast

你的函數從頭開始執行每一個事件被觸發的時間-這包括初始化executed 換句話說,每次函數運行時,您都將executed設置為false!

要解決此問題,您需要將變量定義拉到函數外部:

var executed = false;

$(window).scroll(function() {
    if (!executed) { 
        executed = true;

        ...
    }
});

另一個選擇是使用unbind(),如以下JS代碼所示:

$(window).scroll(myScrollFunction);
function myScrollFcuntion()
{
    // do things
    $(window).unbind("scroll", myScrollFunction);
}

當滾動事件發生時,執行的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);
     // -->
 }}
 });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM