jQuery中mousewheel的问题

我在头部有以下代码:

 jQuery(function($) { $('#box').bind('mousewheel', function(event, delta) { var dir = delta > 0 ? 'Up' : 'Down', vel = Math.abs(delta); alert(dir + ' at a velocity of ' + vel); return false; }); }); 

在Firefox 5中没有任何事情发生。 在Chrome 13和IE 9中,无论我向哪个方向滚动,我都会以“NaN的速度向下”。

我怎样才能解决这个问题? 我想要做的是检查用户是向上scorlliing,还是向下滚动。

谢谢你的帮助!

这意味着delta未定义,这可能意味着您没有包含正确的插件,或者将其包含在错误的位置。

不知道你下载了什么,我现在已经尝试过这个并且工作正常 。

如果删除外部资源,它将无法像您的情况那样工作。

不使用新的jQuery 2.0.1 ……好吧,它可以工作,但不是所希望的。 此代码仅检测向下移动(这意味着负delta)。 我试过这段代码,结果总是否定的:

 var num = 0; $('#container').bind('mousewheel DOMMouseScroll',function(e, delta) { if(delta > 0) { $("#output").text(++num); } else { $("#output").text(--num); } e.stopPropagation(); e.preventDefault(); }); 

DOMMouseScrollDOMMouseScroll相同,但适用于Firefox。

更正

我在这篇文章中发现了这个新代码,现在它已经在jQuery 2.0.1中使用Chrome和Firefox(我已修复它)。 问题是返回的delta值未定义。

 function extractDelta(e) { if (e.wheelDelta) { return e.wheelDelta; } if (e.originalEvent.detail) { return e.originalEvent.detail * -40; } if (e.originalEvent && e.originalEvent.wheelDelta) { return e.originalEvent.wheelDelta; } } var num = 0; $('#container').bind('mousewheel DOMMouseScroll',function(e) { var d = extractDelta(e); if(d > 0) { $("#output").text(++num); } else { $("#output").text(--num); } e.stopPropagation(); e.preventDefault(); }); 

Containeroutput只是两个空div。

这是一个跨浏览器的解决方案:

 var onMouseWheel = function(e) { e = e.originalEvent; var delta = e.wheelDelta>0||e.detail<0?1:-1; alert(delta); } $("body").bind("mousewheel DOMMouseScroll", onMouseWheel); 

适用于jQuery 1.6.x,但不适用于jQuery 1.7.x.
好像jQuery中出现了一些问题。