我试图在我的页面上打开灯箱时禁用滚动条,并找到了这个非常有用的脚本,可以完美实现此功能。(http://jsfiddle.net/mrtsherman/eXQf3/3/) 不幸的是,当我将其用于自己的页面时,它也禁用了灯箱中的滚动条。 我开始使用警报来调试代码,只发现事件.wheelDelta在我的页面上返回"未定义",而在JSFiddle中返回-120。
我试图在我的页面上打开灯箱时禁用滚动条,并找到了这个非常有用的脚本,可以完美实现此功能。(http://jsfiddle.net/mrtsherman/eXQf3/3/) 不幸的是,当我将其用于自己的页面时,它也禁用了灯箱中的滚动条。 我开始使用警报来调试代码,只发现事件.wheelDelta在我的页面上返回"未定义",而在JSFiddle中返回-120。
在jQuery事件处理程序中,event
对象并不反映真实事件。 wheelDelta
是一个非标准的事件属性IE和Opera,可以通过jQuery事件的originalEvent
属性获取。
在jQuery 1.7+中,detail
属性不可用于jQuery事件对象。因此,在DOMMouseScroll
事件中,您还应该使用 event.originalEvent.detail
来获取此属性。此方法与旧版本的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));
});
非常感谢 @Mark 对该函数进行 jQuery 化 (:
if(e.originalEvent && e.originalEvent.deltaY) return e.originalEvent.deltaY * -40
。 - mpen$(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 :(
function getWheelDelta(event) {
return event.wheelDelta || -event.detail || event.originalEvent.wheelDelta || -event.originalEvent.detail || -(event.originalEvent.deltaY * 25) || null;
}
以下是我使用jQuery获取带有overflow:hidden
CSS规则的滚动元素的差异的示例...
$('#parent-id').on('wheel mousewheel DOMMouseScroll', function(event) {
var node = $('#child-id');
node.prop('scrollTop', parseFloat(node.prop('scrollTop')) - (getWheelDelta(event) / 2));
return false;
});
getWheelDelta
。 - Maveloevent.originalEvent.deltaY
。由于每个滚轮事件都注册了1+/-,因此乘以25倍的速度。 - MaveloextractDelta(e)
,使其在Firefox中工作。我使用了e.originalEvent.detail
而不是e.detail
,因为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;
}
}