event.wheelDelta返回undefined

Cup*_*696 40 javascript jquery scroll

所以当我的灯箱打开时,我正试图在我的页面上禁用滚动,我发现这非常有用的脚本就是这样做的.(http://jsfiddle.net/mrtsherman/eXQf3/3/),不幸的是,当我在自己的页面上使用它时,它也禁止在我的灯箱中滚动.我开始使用警报调试代码,但发现event.wheelDelta在我的页面上返回"undefined",而在JSFiddle中,它返回-120.

Rob*_*b W 61

eventjQuery事件处理程序中的对象不反映真实事件.wheelDelta是一个非标准的事件属性IE和Opera,可通过originalEventjQuery事件的属性获得.

在jQuery 1.7+中,该detail属性在jQuery Event对象中不可用.因此,您还应该event.originalEvent.detailDOMMouseScroll活动中使用 此属性.此方法与旧的jQuery版本向后兼容.

event.originalEvent.wheelDelta
Run Code Online (Sandbox Code Playgroud)

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

  • 你是个天才!我已经看过很多其他的解决方案了,而你的小提琴是唯一能够触及根本并实际工作的小提琴! (3认同)

psy*_*brm 12

$.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);
            }
        });
    });
};
Run Code Online (Sandbox Code Playgroud)

并使用这样的:

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

为了jquery-fying函数,给@Mark做了大事(:


Ol *_*Sen 5

$(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);

});
Run Code Online (Sandbox Code Playgroud)

在Webkit和FF中工作,不能在这里证明IE :(