2015-07-05 82 views
0

我使用這個功能:停止使用Javascript/jQuery的功能

function myFunction(){ 
var position = $(window).scrollTop(); 

$(window).scroll(function() { 
    var scroll = $(window).scrollTop(); 
    if(scroll > position) { 
     // scrolling downwards 
     hypeDocument.showSceneNamed('Section 2', hypeDocument.kSceneTransitionCrossfade, 1.1); 
    } 
    position = scroll; 
}); 

return false; 
} 

在我的網站,我希望用戶得到提出了一個叫做「場景」(在我使用的軟件)的新頁每他們向下滾動。這段代碼工作得很好,但是當我第二次將它設置爲另一個「場景」時,它只是再次調用第一個函數。有什麼辦法可以kill這個函數檢測到滾動事件時?

感謝

+1

的可能重複[刪除jQuery中的事件處理程序的最佳方式?(http://stackoverflow.com/questions/209029/best-way-to-remove-an-event-handler- in-jquery) – JJJ

回答

0

使用或者解除綁定或關閉的jQuery的方法只是刪除滾動事件

$(window).off("scroll"); 

$(window).unbind("scroll"); 
+0

好的。如果我回到這個「場景」,該功能還會運行嗎? – dwinnbrown

+0

事件已經綁定,並且eventhandler函數已經在內存中,即使您刪除了該函數,那麼該代碼也是可執行的。你需要從dom分離事件。 –

+0

好吧,你知道我會怎麼做嗎?如果我將解除綁定應用到第一個滾動條上,當場景刷新時我可以將其刪除,以便它在返回到相同場景時可以使用它? – dwinnbrown

0

您可以使用one()只執行一次事件。 jQuery API。它與Laxmikant的答案具有相同的效果,但只是將代碼縮減爲一行。

function myFunction() { 
    var position = $(window).scrollTop(); 

    $(window).one('scroll', function() { // Change 
    var scroll = $(window).scrollTop(); 
    if (scroll > position) { 
     // scrolling downwards 
     hypeDocument.showSceneNamed('Section 2', hypeDocument.kSceneTransitionCrossfade, 1.1); 
    } 
    position = scroll; 
    }); 

    return false; 
} 
+0

好。這是否允許我在場景中再次運行它,或者這會在網站訪問期間真正殺死函數嗎? – dwinnbrown

+0

每次頁面加載時都會工作,即JS被刷新。功能被重置。嘗試一次代碼:) –

+0

@dwinnbrown,此代碼將只能用於一個滾動。 –