有没有办法scroll
在 jQuery 中获取鼠标滚轮事件(不是谈论事件)?
在 jQuery 中获取鼠标滚轮事件?
IT技术
javascript
jquery
mousewheel
2021-01-16 20:01:59
6个回答
$(document).ready(function(){
$('#foo').bind('mousewheel', function(e){
if(e.originalEvent.wheelDelta /120 > 0) {
console.log('scrolling up !');
}
else{
console.log('scrolling down !');
}
});
});
绑定到两者mousewheel
并DOMMouseScroll
最终对我来说非常有效:
$(window).bind('mousewheel DOMMouseScroll', function(event){
if (event.originalEvent.wheelDelta > 0 || event.originalEvent.detail < 0) {
// scroll up
}
else {
// scroll down
}
});
此方法适用于 IE9+、Chrome 33 和 Firefox 27。
编辑 - 2016 年 3 月
我决定重新审视这个问题,因为已经有一段时间了。滚动事件的 MDN 页面有一个很好的方法来检索使用 的滚动位置requestAnimationFrame
,这比我以前的检测方法更可取。除了滚动方向和位置之外,我还修改了他们的代码以提供更好的兼容性:
(function() {
var supportOffset = window.pageYOffset !== undefined,
lastKnownPos = 0,
ticking = false,
scrollDir,
currYPos;
function doSomething(scrollPos, scrollDir) {
// Your code goes here...
console.log('scroll pos: ' + scrollPos + ' | scroll dir: ' + scrollDir);
}
window.addEventListener('wheel', function(e) {
currYPos = supportOffset ? window.pageYOffset : document.body.scrollTop;
scrollDir = lastKnownPos > currYPos ? 'up' : 'down';
lastKnownPos = currYPos;
if (!ticking) {
window.requestAnimationFrame(function() {
doSomething(lastKnownPos, scrollDir);
ticking = false;
});
}
ticking = true;
});
})();
此代码目前正在 Chrome v50, Firefox v44, Safari v9, and IE9+
参考:
截至 2017 年,您可以只写
$(window).on('wheel', function(event){
// deltaY obviously records vertical scroll, deltaX and deltaZ exist too.
// this condition makes sure it's vertical scrolling that happened
if(event.originalEvent.deltaY !== 0){
if(event.originalEvent.deltaY < 0){
// wheeled up
}
else {
// wheeled down
}
}
});
适用于当前的 Firefox 51、Chrome 56、IE9+
有一个插件可以检测一个区域上的上/下鼠标滚轮和速度。
谈论“鼠标滚轮”事件的答案是指已弃用的事件。标准事件只是“轮子”。请参阅https://developer.mozilla.org/en-US/docs/Web/Reference/Events/wheel