所以我试图禁用我的页面上的滚动,当我的灯箱打开时,我发现这个确实有用的脚本。 (http://jsfiddle.net/mrtsherman/eXQf3/3/),不幸的是,当我在自己的页面上使用它时,它禁用了我的lightbox中的滚动功能。我开始用警报调试代码,只是为了发现event.wheelDelta在我的页面上返回“undefined”,而在JSFiddle中,它返回-120。event.wheelDelta返回undefined
回答
jQuery事件处理程序中的event
对象不反映真实事件。 wheelDelta
是一个非标准事件属性IE和Opera,可通过jQuery事件的originalEvent
属性获得。
在jQuery 1.7+中,detail
属性在jQuery Event对象中不可用。因此,您还应该在DOMMouseScroll
事件中使用event.originalEvent.detail
作为此属性。此方法与旧版jQuery版本向后兼容。
event.originalEvent.wheelDelta
演示:http://jsfiddle.net/eXQf3/22/
参见:http://api.jquery.com/category/events/event-object/
谢谢,它的工作! – CupOfTea696 2012-01-17 16:43:47
你是一个天才!我看了很多其他的解决方案,你的小提琴是唯一一个得到根,实际上作品! – 2012-12-21 21:01:08
谢谢你节省了很多时间 – suvajit 2013-03-20 07:58:21
$.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以@马克对jQuery的fying功能(:
在最新的Firefox中无法正常工作,发现三角洲隐藏在这里:'if(e.originalEven t && e.originalEvent.deltaY)return e.originalEvent.deltaY * -40' – mpen 2013-09-27 15:52:25
@Mark修正了它,现在应该工作..我希望有一些类型的通用三角洲jquery,我讨厌这个跨浏览器的东西 – 2013-10-03 09:47:05
是啊,我不知道为什么这不会在jQuery核心。我做了一个函数:http://jsfiddle.net/mnbayazit/uTbGp/3/在FF和Chrome中工作,还没有得到它在IE8的工作。 – mpen 2013-10-03 15:42:30
我试过你的解决方案,psycho brm,我已经改变了功能extractDelta(e)
,以使其在Firefox中工作。而不是e.detail
我使用e.originalEvent.detail
,因为Firefox返回未定义的增量。我已将解决方案和测试代码上传到此post。我希望它有帮助。
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;
}
}
$(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,不能证明IE这里:(
- 1. 返回函数返回'undefined'
- 2. AJAX返回undefined
- 3. gui.Window.open()返回undefined
- 4. .filter()返回undefined
- 5. Ajax返回undefined
- 6. CONSOLE.LOG返回undefined
- 7. getElementsByClassName返回undefined
- 8. parseFromString返回'undefined'
- 9. Array.prototype.map返回undefined
- 10. dijit.byId返回undefined
- 11. chrome.alarms返回undefined
- 12. parent.window.location.pathname返回undefined?
- 13. sessionAsSigner返回“undefined”
- 14. $ .html()返回undefined?
- 15. cfajaxproxy返回undefined
- 16. .html()返回undefined
- 17. Console.log返回'undefined'
- 18. getJSON返回undefined
- 19. parseInt返回undefined
- 20. sessionStorage返回undefined
- 21. song.currentTime返回undefined
- 22. 返回undefined JS
- 23. lookForAt返回undefined
- 24. Meteor.methods返回undefined
- 25. $ routeParams.param返回undefined
- 26. $ route.current返回undefined?
- 27. json_encode返回undefined
- 28. this.props.firstCard返回undefined
- 29. express.Router()返回undefined
- 30. Event.LatLng返回undefined
我也有过类似的问题,它来到了DOM命名空间。你能表现出一定的代码,或只是检查 – SpYk3HH 2012-01-16 21:10:41