/* copyright (c) 2006 brandon aaron (brandon.aaron@gmail.com || http://brandonaaron.net) * dual licensed under the mit (http://www.opensource.org/licenses/mit-license.php) * and gpl (http://www.opensource.org/licenses/gpl-license.php) licenses. * thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers. * thanks to: mathias bank(http://www.mathias-bank.de) for a scope bug fix. * * $lastchangeddate: 2007-12-20 09:02:08 -0600 (thu, 20 dec 2007) $ * $rev: 4265 $ * * version: 3.0 * * requires: $ 1.2.2+ */ (function($) { $.event.special.mousewheel = { setup: function() { var handler = $.event.special.mousewheel.handler; // fix pagex, pagey, clientx and clienty for mozilla if ( $.browser.mozilla ) $(this).bind('mousemove.mousewheel', function(event) { $.data(this, 'mwcursorposdata', { pagex: event.pagex, pagey: event.pagey, clientx: event.clientx, clienty: event.clienty }); }); if ( this.addeventlistener ) this.addeventlistener( ($.browser.mozilla ? 'dommousescroll' : 'mousewheel'), handler, false); else this.onmousewheel = handler; }, teardown: function() { var handler = $.event.special.mousewheel.handler; $(this).unbind('mousemove.mousewheel'); if ( this.removeeventlistener ) this.removeeventlistener( ($.browser.mozilla ? 'dommousescroll' : 'mousewheel'), handler, false); else this.onmousewheel = function(){}; $.removedata(this, 'mwcursorposdata'); }, handler: function(event) { var args = array.prototype.slice.call( arguments, 1 ); event = $.event.fix(event || window.event); // get correct pagex, pagey, clientx and clienty for mozilla $.extend( event, $.data(this, 'mwcursorposdata') || {} ); var delta = 0, returnvalue = true; if ( event.wheeldelta ) delta = event.wheeldelta/120; if ( event.detail ) delta = -event.detail/3; // if ( $.browser.opera ) delta = -event.wheeldelta; event.data = event.data || {}; event.type = "mousewheel"; // add delta to the front of the arguments args.unshift(delta); // add event to the front of the arguments args.unshift(event); return $.event.handle.apply(this, args); } }; $.fn.extend({ mousewheel: function(fn) { return fn ? this.bind("mousewheel", fn) : this.trigger("mousewheel"); }, unmousewheel: function(fn) { return this.unbind("mousewheel", fn); } }); })(jquery);