2015-05-06 23 views
3

點擊事件後激活滾動偵聽器的正確方法是什麼?單擊事件後滾動偵聽器上的jQuery

我目前使用:

$('.button').click(function (event) { 
    $(window).on("scroll", someFunction); 
} 

someFunction = function() { 
    //do stuff 
    $(window).off("scroll"); //disable scroll listener 
} 

上的click事件啓用它運行someFunction滾動監聽器。該函數在完成時完成填充並禁用滾動監聽器。滾動監聽器在點擊後再次啓用。

我擔心的是我做得不對。請指教!

注意:滾動監聽器不能無限期地運行。它從點擊開始,並且必須在myFunction結束時結束。

注:我不想當用戶停止滾動檢測..

+0

是否行得通?看起來很好,我真的 – scniro

+0

[jQuery滾動()檢測用戶停止滾動時可能的重複](http://stackoverflow.com/questions/9144560/jquery-scroll-detect-when-user-stops-滾動) – Jako

+1

@Jako不是dublicate。我試圖找出如何「發佈點擊事件後激活滾動監聽器」。當用戶停止滾動時不檢測。完全不同! – CyberJunkie

回答

6

您可以使用jQuery .one()

$('.button').on('click', function() { 
    $(window).one('scroll', someFunction); 
}); 
-1

你可以做到這一點的方式如下:

$('.button').click(function (event) { 
    $(window).bind("scroll", someFunction); 
} 

someFunction = function() { 
    //do stuff 
    $(window).unbind("scroll"); // remove scroll listener 
} 
+0

使用'bind'而不是'on'是否有區別? – CyberJunkie

+1

是啊,'綁定'已棄用 – scniro

+0

我沒有發現在API綁定/取消綁定任何棄用的標誌。 – Tyr

3

每一個點擊添加一個附加滾動事件偵聽器。我會用封裝一個額外的變量綁定:

var isScrollBindingActive = false; 
$('.button').click(function (event) { 
    if (!isScrollBindingActive) { 
     isScrollBindingActive = true; 
     $(window).on("scroll", someFunction); 
    } 
} 

someFunction = function() { 
    //do stuff 
    $(window).off("scroll"); //disable scroll listener 
    isScrollBindingActive = false; // allow binding again if wished 
} 
+0

謝謝!這就是我遇到麻煩的原因!我會投票作爲正確的答案,但謝爾蓋的解決方案'$(窗口).one('滾動',someFunction);'似乎工作以及代碼少。 – CyberJunkie