event.wheelDelta返回undefined

所以我试图禁用我的页面上的滚动,当我的灯箱打开,我发现这真的有用的脚本,正是这样做。 ( http://jsfiddle.net/mrtsherman/eXQf3/3/ ),不幸的是,当我在我自己的页面上使用它时,它禁用了在我的lightbox中滚动。 我开始用警报debugging代码,只是发现event.wheelDelta在我的页面上返回“undefined”,而在JSFiddle中 ,它返回-120。

jQuery事件处理程序中的event对象并不反映真实的事件。 wheelDelta是一个非标准的事件属性IE和Opera ,通过jQuery事件的originalEvent属性可用。

在jQuery 1.7+中, detail属性在jQuery Event对象中不可用。 所以,你也应该使用event.originalEvent.detail来为DOMMouseScroll事件的这个属性。 这个方法与旧的jQuery版本是向后兼容的。

 event.originalEvent.wheelDelta 

演示: http : //jsfiddle.net/eXQf3/22/
另见: http : //api.jquery.com/category/events/event-object/

 $.fn.wheel = function (callback) { return this.each(function () { $(this).on('mousewheel DOMMouseScroll', function (e) { e.delta = null; if (e.originalEvent) { if (e.originalEvent.wheelDelta) e.delta = e.originalEvent.wheelDelta / -40; if (e.originalEvent.deltaY) e.delta = e.originalEvent.deltaY; if (e.originalEvent.detail) e.delta = e.originalEvent.detail; } if (typeof callback == 'function') { callback.call(this, e); } }); }); }; 

并像这样使用:

 $('body').wheel(function (e) { e.preventDefault(); $('#myDiv').append($('<div>').text(e.delta)); }); 

大的thx到@Mark for jquery-fying函数(:

 $(this).on('mousewheel DOMMouseScroll', function(e){ var dat = $(e.delegateTarget).data(); //in case you have set some, read it here. var datx = dat.x || 0; // just to show how to get specific out of jq-data object var eo = e.originalEvent; var xy = eo.wheelDelta || -eo.detail; //shortest possible code var x = eo.wheelDeltaX || (eo.axis==1?xy:0); var y = eo.wheelDeltaY || (eo.axis==2?xy:0); // () necessary! console.log(x,y); }); 

在Webkit和FF中工作,不能在这里certificateIE 🙁

我已经尝试了你的解决scheme, psycho brm ,并且我已经改变了函数extractDelta(e)使它在Firefox中工作。 我没有使用e.originalEvent.detail而是使用了e.originalEvent.detail因为Firefox返回了一个未定义的增量。 我已经上传解决scheme和我的testing代码到这个职位 。 我希望它有帮助。

 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; } }