1 /** 2 * @fileOverview normalize mousewheel in gecko 3 * @author yiminghe@gmail.com 4 */ 5 KISSY.add("event/mousewheel", function (S, Event, UA, Utils, EventObject, handle, _data, special) { 6 7 var MOUSE_WHEEL = UA.gecko ? 'DOMMouseScroll' : 'mousewheel', 8 simpleRemove = Utils.simpleRemove, 9 simpleAdd = Utils.simpleAdd, 10 MOUSE_WHEEL_HANDLER = "mousewheelHandler"; 11 12 function handler(e) { 13 var deltaX, 14 currentTarget = this, 15 deltaY, 16 delta, 17 detail = e.detail; 18 19 if (e.wheelDelta) { 20 delta = e.wheelDelta / 120; 21 } 22 if (e.detail) { 23 // press control e.detail == 1 else e.detail == 3 24 delta = -(detail % 3 == 0 ? detail / 3 : detail); 25 } 26 27 // Gecko 28 if (e.axis !== undefined) { 29 if (e.axis === e['HORIZONTAL_AXIS']) { 30 deltaY = 0; 31 deltaX = -1 * delta; 32 } else if (e.axis === e['VERTICAL_AXIS']) { 33 deltaX = 0; 34 deltaY = delta; 35 } 36 } 37 38 // Webkit 39 if (e['wheelDeltaY'] !== undefined) { 40 deltaY = e['wheelDeltaY'] / 120; 41 } 42 if (e['wheelDeltaX'] !== undefined) { 43 deltaX = -1 * e['wheelDeltaX'] / 120; 44 } 45 46 // 默认 deltaY ( ie ) 47 if (!deltaX && !deltaY) { 48 deltaY = delta; 49 } 50 51 // can not invoke eventDesc.handler , it will protect type 52 // but here in firefox , we want to change type really 53 e = new EventObject(currentTarget, e); 54 55 S.mix(e, { 56 deltaY:deltaY, 57 delta:delta, 58 deltaX:deltaX, 59 type:'mousewheel' 60 }); 61 62 return handle(currentTarget, e); 63 } 64 65 special['mousewheel'] = { 66 setup:function () { 67 var el = this, 68 mousewheelHandler, 69 eventDesc = _data._data(el); 70 // solve this in ie 71 mousewheelHandler = eventDesc[MOUSE_WHEEL_HANDLER] = S.bind(handler, el); 72 simpleAdd(this, MOUSE_WHEEL, mousewheelHandler); 73 }, 74 tearDown:function () { 75 var el = this, 76 mousewheelHandler, 77 eventDesc = _data._data(el); 78 mousewheelHandler = eventDesc[MOUSE_WHEEL_HANDLER]; 79 simpleRemove(this, MOUSE_WHEEL, mousewheelHandler); 80 delete eventDesc[mousewheelHandler]; 81 } 82 }; 83 84 }, { 85 requires:['./base', 'ua', './utils', 86 './object', './handle', 87 './data', "./special"] 88 }); 89 90 /** 91 note: 92 not perfect in osx : accelerated scroll 93 refer: 94 https://github.com/brandonaaron/jquery-mousewheel/blob/master/jquery.mousewheel.js 95 http://www.planabc.net/2010/08/12/mousewheel_event_in_javascript/ 96 http://www.switchonthecode.com/tutorials/javascript-tutorial-the-scroll-wheel 97 http://stackoverflow.com/questions/5527601/normalizing-mousewheel-speed-across-browsers/5542105#5542105 98 http://www.javascriptkit.com/javatutors/onmousewheel.shtml 99 http://www.adomas.org/javascript-mouse-wheel/ 100 http://plugins.jquery.com/project/mousewheel 101 http://www.cnblogs.com/aiyuchen/archive/2011/04/19/2020843.html 102 http://www.w3.org/TR/DOM-Level-3-Events/#events-mousewheelevents 103 **/