12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- /**
- * @author trixta
- * @version 1.2
- */
- (function($){
- var mwheelI = {
- pos: [-260, -260]
- },
- minDif = 3,
- doc = document,
- root = doc.documentElement,
- body = doc.body,
- longDelay, shortDelay
- ;
- function unsetPos(){
- if(this === mwheelI.elem){
- mwheelI.pos = [-260, -260];
- mwheelI.elem = false;
- minDif = 3;
- }
- }
- $.event.special.mwheelIntent = {
- setup: function(){
- var jElm = $(this).bind('mousewheel', $.event.special.mwheelIntent.handler);
- if( this !== doc && this !== root && this !== body ){
- jElm.bind('mouseleave', unsetPos);
- }
- jElm = null;
- return true;
- },
- teardown: function(){
- $(this)
- .unbind('mousewheel', $.event.special.mwheelIntent.handler)
- .unbind('mouseleave', unsetPos)
- ;
- return true;
- },
- handler: function(e, d){
- var pos = [e.clientX, e.clientY];
- if( this === mwheelI.elem || Math.abs(mwheelI.pos[0] - pos[0]) > minDif || Math.abs(mwheelI.pos[1] - pos[1]) > minDif ){
- mwheelI.elem = this;
- mwheelI.pos = pos;
- minDif = 250;
-
- clearTimeout(shortDelay);
- shortDelay = setTimeout(function(){
- minDif = 10;
- }, 200);
- clearTimeout(longDelay);
- longDelay = setTimeout(function(){
- minDif = 3;
- }, 1500);
- e = $.extend({}, e, {type: 'mwheelIntent'});
- return $.event.handle.apply(this, arguments);
- }
- }
- };
- $.fn.extend({
- mwheelIntent: function(fn) {
- return fn ? this.bind("mwheelIntent", fn) : this.trigger("mwheelIntent");
- },
-
- unmwheelIntent: function(fn) {
- return this.unbind("mwheelIntent", fn);
- }
- });
- $(function(){
- body = doc.body;
- //assume that document is always scrollable, doesn't hurt if not
- $(doc).bind('mwheelIntent.mwheelIntentDefault', $.noop);
- });
- })(jQuery);
|