Javascript 将功能限制为在重置前触发一次
我有以下功能,用于监控滚动位置和触发功能(在Iscroll4中) bgFadeToggle()函数基本上触发一个函数来显示/隐藏菜单。它包含一个存储向上/向下状态的变量,以便在滚动期间仅触发同一功能一次 我遇到的问题是,如果用户上下滚动的速度相当快,功能就会不断触发——这会在屏幕上产生喜剧效果和舞蹈效果!有人能推荐一种在一定时间内忽略重复呼叫的方法来避免此问题吗Javascript 将功能限制为在重置前触发一次,javascript,jquery,Javascript,Jquery,我有以下功能,用于监控滚动位置和触发功能(在Iscroll4中) bgFadeToggle()函数基本上触发一个函数来显示/隐藏菜单。它包含一个存储向上/向下状态的变量,以便在滚动期间仅触发同一功能一次 我遇到的问题是,如果用户上下滚动的速度相当快,功能就会不断触发——这会在屏幕上产生喜剧效果和舞蹈效果!有人能推荐一种在一定时间内忽略重复呼叫的方法来避免此问题吗 onScrollMove: function() { var thisScrol = myScroll.ge
onScrollMove: function() {
var thisScrol = myScroll.getScrollY()
if (thisScrol < -80 ){
bgfadeToggle('on');
}
if (thisScrol > -80){
bgfadeToggle('off');
}
},
您可以保留一个布尔值
animationDone
在动画之前将其设置为false,然后设置为true。当布尔值为
false
时,不要执行其他动画。如果要在函数调用周围设置一个锁,则该锁应为全局变量并声明为false:
onScrollMove: function() {
var thisScrol = myScroll.getScrollY()
if (thisScrol < -80 && !locked){
locked = true;
bgfadeToggle('on');
locked = false;
}
if (thisScrol > -80 && !locked){
locked = true;
bgfadeToggle('off');
locked = false;
}
onScrollMove:function(){
var thisScrol=myScroll.getScrollY()
如果(此开关<-80&!锁定){
锁定=真;
bgfadeToggle('on');
锁定=错误;
}
如果(thisScrol>-80&&!已锁定){
锁定=真;
bgfadeToggle(“关闭”);
锁定=错误;
}
},您可以使用如下的后期调用模式:
onScrollMove: function () {
var thisScrol = myScroll.getScrollY();
scrollCallback.invoke(thisScrol < -80);
};
var scrollCallback = function () {
var _timeoutId,
_delayToCall = 500;
return {
invoke: function (lessThan) {
window.clearTimeout(_timeoutId);
_timeoutId = window.setTimeout(function () {
bgfadeToggle(lessThan ? 'on' : 'off');
}, _delayToCall);
}
};
}();
onScrollMove:函数(){
var thisScrol=myScroll.getScrollY();
scrollCallback.invoke(thisScrol<-80);
};
var scrollCallback=函数(){
var\u timeoutId,
_延迟呼叫=500;
返回{
调用:函数(lessThan){
clearTimeout(_timeoutId);
_timeoutId=window.setTimeout(函数(){
bgfadeToggle(小于“开”:“关”);
},_delayToCall);
}
};
}();
如何显示菜单?你能显示bgfadeToggle
code吗?刚刚添加-干杯,里卡多
onScrollMove: function () {
var thisScrol = myScroll.getScrollY();
scrollCallback.invoke(thisScrol < -80);
};
var scrollCallback = function () {
var _timeoutId,
_delayToCall = 500;
return {
invoke: function (lessThan) {
window.clearTimeout(_timeoutId);
_timeoutId = window.setTimeout(function () {
bgfadeToggle(lessThan ? 'on' : 'off');
}, _delayToCall);
}
};
}();