// мини библа для удобства
(function(WheelControl) {
WheelControl.prototype = {
constructor: WheelControl,
_freezed: true,
_onwheel: function(fn) {
var self = this;
return this._onwheel.fn = function(e) {
e = e || window.event;
if (!e.preventDefault) {
e.preventDefault = function() {
e.returnValue = false;
}
}
fn.call(self, (-e.detail / 3) || (e.wheelDelta / 120), e);
}
},
bind: function(fn) {
this._onwheel.fn = this._onwheel(fn);
this.unfreeze();
return this;
},
unbind: function() {
this.freeze();
this._onwheel.fn = null;
return this;
},
freeze: function() {
this._freezed = true;
this.elem[this._params.removeName](this._params.wheelType, this._onwheel.fn, false);
return this;
},
unfreeze: function() {
if (this._onwheel.fn && this._freezed) {
this.elem[this._params.addName](this._params.wheelType, this._onwheel.fn, false);
this._freezed = false;
}
return this;
}
};
})(window.WheelControl = function WheelControl(elem) {
if (!(this instanceof WheelControl)) {
return new WheelControl(elem);
}
if (!(this.elem = elem)) {
throw Error('The parameter must be an HTML element');
}
this._params = {
addName: elem.addEventListener ? 'addEventListener' : 'attachEvent',
removeName: elem.removeEventListener ? 'removeEventListener' : 'detachEvent',
wheelType: elem.addEventListener ? ('onwheel' in document ? 'wheel' :
'onmousewheel' in document ? 'mousewheel' : 'MozMousePixelScroll') : 'onmousewheel'
};
});
// =====================================================
// работа с минибиблой
// =====================================================
WheelControl(document).bind(function(delta, event) {
// заморозим получение события колеса мыши
this.freeze();
// ... что-то тут делаем, анимируем, и прочие действия
if (delta > 0) {
// колесо крутят вверх, на начало страницы
} else if (delta < 0) {
// колесо крутят вниз, в конец страницы
}
// отменяем действие по умолчанию
event.preventDefault();
// теперь можем снова получать событие
this.unfreeze();
});