所以我想在一定条件下关闭一个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;
});
}
答案 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;每次向上滚动时输出。
您需要在document.ready
事件后添加滚动处理程序:
$(function() {
/* YOUR CODE HERE */
});
我认为您在尝试订阅和取消订阅处理程序时遇到了错误。 你应该像你一样确定滚动的方向。 然后,如果它是正确的方向 - 调用你的处理程序:
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