Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript函数——使用wheel事件调用单一时间?_Javascript_Macos_Mousewheel_Scrollwheel - Fatal编程技术网

JavaScript函数——使用wheel事件调用单一时间?

JavaScript函数——使用wheel事件调用单一时间?,javascript,macos,mousewheel,scrollwheel,Javascript,Macos,Mousewheel,Scrollwheel,这个代码几乎可以工作,但有一个小问题,这就是我希望你的帮助 目标:此脚本的目标是调用parseScroll()功能用户使用鼠标旋转时的一次 问题:代码最初是有效的。但是,如果你用手指在短时间内多次转动鼠标, parseScroll()函数。它这样做是因为 没有意识到前一个轮子已经结束,因为 适当的去抖动算法,防止函数被调用 一千次 (更新):我找到了这篇文章,它似乎解决了我正在寻找的问题。有人能帮我理解它并用纯JavaScript重新创建它吗 旁注:这个问题是针对OSX的,但我很感激 如果win

这个代码几乎可以工作,但有一个小问题,这就是我希望你的帮助

目标:此脚本的目标是调用
parseScroll()功能用户使用鼠标旋转时的一次

问题:代码最初是有效的。但是,如果你用手指在短时间内多次转动鼠标,
parseScroll()函数。它这样做是因为
没有意识到前一个轮子已经结束,因为
适当的去抖动算法,防止函数被调用
一千次

(更新):我找到了这篇文章,它似乎解决了我正在寻找的问题。有人能帮我理解它并用纯JavaScript重新创建它吗

旁注:这个问题是针对OSX的,但我很感激 如果windows用户能告诉我它是否在做它应该做的事情 在windows中进行测试,因为我没有windows机器来测试它

这是给我带来问题的脚本副本

window.addEventListener('load',function(){
变量滚动状态={
惠林:错,
函数调用:false
};
var scrollTimer=false;
window.addEventListener('wheel',函数(e){
scrollStatus.wheeling=true;
如果(!scrollStatus.functionCall){
(e);
scrollStatus.functionCall=true;
}
clearInterval(滚动计时器);
scrollTimer=window.setTimeout(函数(){
scrollStatus.wheeling=false;
scrollStatus.functionCall=false;
}, 500);
});
函数解析滚动(e){
//console.log(scrollStatus.functionCall)
console.log(e.deltaY)
如果(e.deltaY>0){
console.log('向下滚动')
}
如果(e.deltaY<0){
console.log('向上滚动')
}
}
});
html,
身体{
宽度:100%;
身高:100%;
背景:#333;
溢出:隐藏;
颜色:#fff;
}

请转动鼠标并打开web inspector控制台以查看结果行为。
正如您所理解的,问题似乎在于去盎司功能。你所要做的就是改变毫秒间隔,这应该会解决它

注意:我去掉了HTML和CSS以减少混乱。我还对JS进行了一些编辑,使其变得更短-希望这不是问题

window.addEventListener('load',function(){
变量滚动状态={
惠林:错,
函数调用:false
};
var scrollTimer=false;
window.addEventListener('wheel',函数(e){
scrollStatus.wheeling=true;
如果(!scrollStatus.functionCall){
//在这里滚动
console.log(e.deltaY)
如果(e.deltaY>0){
console.log('向下滚动')
}
如果(e.deltaY<0){
console.log('向上滚动')
}
scrollStatus.functionCall=true;
}
clearInterval(滚动计时器);
scrollTimer=window.setTimeout(函数(){
scrollStatus.wheeling=false;
scrollStatus.functionCall=false;
},50);//根据您的喜好设置此毫秒
});
});编辑、更新

尝试将处理程序定义为命名函数,在调用
parseScroll
后调用
.removeEventListener
window.addEventListener('load',function(){
变量滚动状态={
惠林:错,
函数调用:false
};
功能轮(e){
scrollStatus.wheeling=true;
如果(!scrollStatus.functionCall){
scrollStatus.functionCall=true;
(e);
window.removeEventListener(“轮子”,轮子,假)
}
clearInterval(滚动计时器);
scrollTimer=window.setTimeout(函数(){
scrollStatus.wheeling=false;
scrollStatus.functionCall=false;
}, 500);
}
var scrollTimer=false;
window.addEventListener('wheel',wheel,false);
函数解析滚动(e){
//console.log(scrollStatus.functionCall)
console.log(e.deltaY)
如果(e.deltaY>0){
console.log('向下滚动')
}
如果(e.deltaY<0){
console.log('向上滚动')
}
}
});
html,
身体{
宽度:100%;
身高:100%;
背景:#333;
溢出:隐藏;
颜色:#fff;
}

请转动鼠标并打开web inspector控制台以查看结果行为。
感谢您的回答。我想你误解了这个问题,尽管这可能是我的误解。我不想在一次调用后破坏函数。相反,我希望当用户用手指“触摸”/“旋转”鼠标时,函数最多被调用一次。@www139尝试使用
事件处理程序在
旋转
事件处理程序中用命名函数替换匿名函数。removeEventListener
;请参阅更新的帖子。我想这就是我所追求的,只是我想在事件侦听器被删除后读取它,但我会自己进行实验,看看是否可以让您的代码适应我的情况。谢谢您的回答:)@www139应该能够使用
窗口重新连接事件。addEventListener(“wheel”,wheel)
正是我所想的!我将进一步试验你的答案。:)谢谢:)我正在试验和比较你的答案。如果你只需要允许用户每隔几秒钟“调用”一次函数,这在技术上是可行的,但在我的情况下,我希望它能比这更灵敏。谢谢你的回答:)这似乎给了我想要的行为。它的响应速度非常快,但当您使用“轮子”时,它不会多次调用代码。事实上,请注意(对不起),我用更短的时间间隔进行了进一步的测试,似乎我能够以
30
毫秒的间隔获得非常准确的结果。是的,你已经找到了一个大致准确的解决方案。我会在接下来的一小段时间里留意任何事情