关闭后打开jQuery事件监听器

时间:2015-07-05 15:30:38

标签: javascript jquery scroll jquery-events

所以我想在一定条件下关闭一个jQuery事件(如果用户向下滚动),但如果他们相反(向上滚动),那么我希望事件打开,以便它将触发。

这是我的代码,但由于我是jQuery的新手,我很确定我在处理程序中遗漏了一些内容 - 我只是不知道它应该是什么。

以下是代码:

 function myFunction() {


var handler = function(e){
    //code here
}
var position = $(window).scrollTop();

$(window).scroll(function() {
    var scroll = $(window).scrollTop();
    if(scroll > position) {
         // scrolling downwards
         $(window).off("scroll", handler);  
         } 

       if(scroll < position) {
         //scrolling upwards
         $(window).on("scroll", handler); 
         hypeDocument.showPreviousScene(hypeDocument.kSceneTransitionPushTopToBottom, 1.1)
         }
    position = scroll;
});



}

3 个答案:

答案 0 :(得分:1)

$(function()
{

var handler = function(e){
    // hypeDocument.showPreviousScene(hypeDocument.kSceneTransitionPushTopToBottom, 1.1)
    console.log('handler');
}

var position = $(window).scrollTop();

$(window).scroll(function() {
    var scroll = $(window).scrollTop();
    if (scroll > position) {
         // scrolling downwards
         // NOTHING
         } 

       if(scroll < position) {
         //scrolling upwards
         handler();
         }
    position = scroll;
});

});

打开控制台,您将看到&#34; handler&#34;每次向上滚动时输出。

  1. 您需要在document.ready事件后添加滚动处理程序:

     $(function() {
          /* YOUR CODE HERE */
     });
    
  2. 我认为您在尝试订阅和取消订阅处理程序时遇到了错误。 你应该像你一样确定滚动的方向。 然后,如果它是正确的方向 - 调用你的处理程序:

    if (scroll < position) {
         //scrolling upwards
         handler();
    }
    

答案 1 :(得分:1)

更新3:以后你可以这样做。

var nT = $(window).scrollTop,  pos = nT(), func = function(e){ /*code here*/ };

$(window).scroll(()=>(nT()<pos)&&(pos=nT(),func())); //make people hate you.

更新2:并使其更小..

var newTop = $(window).scrollTop,  position = newTop(),
handler = function(e){ /*code here*/ };

$(window).scroll(function() {
    (newTop()<position)&&(position=newTop(),handler());
});

更新:或者你可以做得更好

var newTop = $(window).scrollTop,  position = newTop();

var handler = function(e){
    //code here
};

$(window).scroll(function() {
    var scroll = newTop();
    if(scroll < position) handler();
    position = scroll;
});

使用布尔变量而不是附加/分离事件。

var disabled= false,
    newTop = $(window).scrollTop,
    position = newTop();

var handler = function(e){
    if (disabled) return;
    //code here
};


$(window).scroll(function() {
    var scroll = newTop();
    if(scroll > position) disabled=true;
    else disabled=false; 
    position = scroll;
});

答案 2 :(得分:0)

尝试使用if-else语句而不是两个ifs