79 lines
2.1 KiB
JavaScript
79 lines
2.1 KiB
JavaScript
/**
|
|
*
|
|
* credits for this plugin go to brandonaaron.net
|
|
*
|
|
* unfortunately his site is down
|
|
*
|
|
* @param {Object} up
|
|
* @param {Object} down
|
|
* @param {Object} preventDefault
|
|
*/
|
|
jQuery.fn.extend({
|
|
mousewheel: function(up, down, preventDefault) {
|
|
return this.hover(
|
|
function() {
|
|
jQuery.event.mousewheel.giveFocus(this, up, down, preventDefault);
|
|
},
|
|
function() {
|
|
jQuery.event.mousewheel.removeFocus(this);
|
|
}
|
|
);
|
|
},
|
|
mousewheeldown: function(fn, preventDefault) {
|
|
return this.mousewheel(function(){}, fn, preventDefault);
|
|
},
|
|
mousewheelup: function(fn, preventDefault) {
|
|
return this.mousewheel(fn, function(){}, preventDefault);
|
|
},
|
|
unmousewheel: function() {
|
|
return this.each(function() {
|
|
jQuery(this).unmouseover().unmouseout();
|
|
jQuery.event.mousewheel.removeFocus(this);
|
|
});
|
|
},
|
|
unmousewheeldown: jQuery.fn.unmousewheel,
|
|
unmousewheelup: jQuery.fn.unmousewheel
|
|
});
|
|
|
|
|
|
jQuery.event.mousewheel = {
|
|
giveFocus: function(el, up, down, preventDefault) {
|
|
if (el._handleMousewheel) jQuery(el).unmousewheel();
|
|
|
|
if (preventDefault == window.undefined && down && down.constructor != Function) {
|
|
preventDefault = down;
|
|
down = null;
|
|
}
|
|
|
|
el._handleMousewheel = function(event) {
|
|
if (!event) event = window.event;
|
|
if (preventDefault)
|
|
if (event.preventDefault) event.preventDefault();
|
|
else event.returnValue = false;
|
|
var delta = 0;
|
|
if (event.wheelDelta) {
|
|
delta = event.wheelDelta/120;
|
|
if (window.opera) delta = -delta;
|
|
} else if (event.detail) {
|
|
delta = -event.detail/3;
|
|
}
|
|
if (up && (delta > 0 || !down))
|
|
up.apply(el, [event, delta]);
|
|
else if (down && delta < 0)
|
|
down.apply(el, [event, delta]);
|
|
};
|
|
|
|
if (window.addEventListener)
|
|
window.addEventListener('DOMMouseScroll', el._handleMousewheel, false);
|
|
window.onmousewheel = document.onmousewheel = el._handleMousewheel;
|
|
},
|
|
|
|
removeFocus: function(el) {
|
|
if (!el._handleMousewheel) return;
|
|
|
|
if (window.removeEventListener)
|
|
window.removeEventListener('DOMMouseScroll', el._handleMousewheel, false);
|
|
window.onmousewheel = document.onmousewheel = null;
|
|
el._handleMousewheel = null;
|
|
}
|
|
}; |