Javascript 关闭后打开jQuery事件侦听器

Javascript 关闭后打开jQuery事件侦听器,javascript,jquery,scroll,jquery-events,Javascript,Jquery,Scroll,Jquery Events,因此,我想在特定条件下关闭jQuery事件(如果用户向下滚动),但如果他们做了相反的事情(向上滚动),那么我想打开该事件,这样它就会触发 这是我的代码,但由于我是jQuery新手,我很确定我在处理程序中遗漏了一些东西——我只是不知道它应该是什么 代码如下: function myFunction() { var handler = function(e){ //code here } var position = $(window).scrollTop(); $(window).

因此,我想在特定条件下关闭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;
});



}
函数myFunction(){
变量处理程序=函数(e){
//代码在这里
}
var position=$(window.scrollTop();
$(窗口)。滚动(函数(){
var scroll=$(窗口).scrollTop();
如果(滚动>位置){
//向下滚动
$(窗口).off(“滚动”,处理程序);
} 
如果(滚动<位置){
//向上滚动
$(窗口).on(“滚动”,处理程序);
hypeDocument.showPrevious场景(hypeDocument.kSceneTransitionPushTopToBottom,1.1)
}
位置=滚动;
});
}

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

$(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;
});

});
  • 我认为你试图订阅和取消订阅你的处理程序是错误的。 您只需确定滚动方向即可。 然后,如果方向正确,请致电您的处理程序:

    if (scroll < position) {
         //scrolling upwards
         handler();
    }
    
    if(滚动<位置){
    //向上滚动
    handler();
    }
    

  • 更新3:以后您可以这样做

    var nT = $(window).scrollTop,  pos = nT(), func = function(e){ /*code here*/ };
    
    $(window).scroll(()=>(nT()<pos)&&(pos=nT(),func())); //make people hate you.
    

    我该怎么做?对不起,我是新来的jQuery@Tushar我正在使用
    $(窗口).on(“滚动”,处理程序)中的.on和.off方法然后在处理程序内部放入
    如果(禁用)返回并且当您想要禁用时,只需执行
    disabled=true
    ,当返回到不禁用时
    disabled=false谢谢,但是我在一个函数中运行javascript,然后在另一个函数中停止它。由于软件的限制,我不得不这样做。有什么办法可以用这个来做吗?谢谢教授,你的评论对我来说不是很清楚。请提供更多关于过程和功能的信息。基本上,我有两个“场景”,它们与我正在使用的软件中的页面类似。我在一个场景中运行javascript,它会在整个项目中继续运行,但基本上我想阻止滚动在单个场景中发生,所以使用了
    $(window).on(“滚动”)
    停止向下滚动,但也会阻止向上滚动。看这些截图:我认为你不能用那种特殊的方式做你想做的事情。请提供您的场景的详细信息。我说得对吗?在
    场景1
    中,您可以滚动到任何位置。当您进入
    场景2
    时,您需要能够向上滚动,但不能向下滚动?您需要
    hypeDocument
    中的更多信息来处理此问题。如果没有真正的代码,很难提供具体的代码示例。谢谢。将给它一个镜头,并让您知道它是如何进行的:)我如何确切地将变量设置为true?当您希望事件不触发时,disabled=true我对此有很大的困难。正如我所说,我是初学者,如果我能解释得更清楚一点,你能帮我吗?基本上,当用户试图向下滚动时,它应该什么也不做。考虑使用“关闭”来停止滚动方法。然后,如果他们向上滚动,他们可以这样做,事件将正常发生。
    var nT = $(window).scrollTop,  pos = nT(), func = function(e){ /*code here*/ };
    
    $(window).scroll(()=>(nT()<pos)&&(pos=nT(),func())); //make people hate you.
    
    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;
    });