-
Notifications
You must be signed in to change notification settings - Fork 9
/
drag-on.min.js
1 lines (1 loc) · 7.21 KB
/
drag-on.min.js
1
$(function(){$.fn.extend({dragOn:function(a){return jQuery.DragOn(this,a)}}),$.extend({DragOn:function(a,b){function e(a){var b=a||event,c=b&&b.target&&(b.target.tagName||b.target.localName||b.target.nodeName).toLowerCase();return b&&c&&(c in d.opt.exclusion||b.target.href||$(b.target).parents().attr("href")&&(b.stopPropagation&&b.stopPropagation(),!0))||(b&&b.preventDefault&&b.preventDefault(),b.stopPropagation&&b.stopPropagation(),!1)}var d,c={exclusion:{input:"",textarea:"",select:"",object:"",iframe:"",details:"",id:"#gmap,#map-canvas,.button,[data-overflow=no-dragon],a > :not(img)"},cursor:"all-scroll",holdEvents:"mousedown.dragon touchstart.dragon",draggEvents:"mousemove.dragon touchmove.dragon",releaseEvents:"mouseup.dragon touchend.dragon",wheelEvents:"mousewheel.dragon wheel.dragon",leaveEvents:"mouseleave.dragon touchleave.dragon touchcancel.dragon",easing:"true"};return a=$(a),d={opt:function(a){for(var b in a)c[b]=a[b];return c}(b),set option(a){for(var b in a)d.opt[b]=a[b];return a&&!d.on&&d.toggle().toggle(),d.opt},get option(){return d.opt},moment:{},bypass:!1,mx:1,my:1,on:!0,round:function(a){return a+(a>0?.5:-.5)<<1>>1},abs:function(a){return a>0?a:-a},toggle:function(b){var c=d.opt;return d.on?(a.css({cursor:c.cursor}).on(c.holdEvents,"a",e).find("a").css({cursor:"pointer"}),a.on(c.wheelEvents,d.onWhell).on(c.holdEvents,d.onHold),$("body").on({"keydown.dragon":d.onKeyDown,"keyup.dragon":d.onKeyDown}),("Info"in window&&Info||console).log("DragOn fly...")):(a.css({cursor:""}).off(c.holdEvents,"**",e).find("a").css({cursor:""}),a.off(c.wheelEvents,d.onWhell).off(c.holdEvents,d.onHold),$("body").off({"keydown.dragon":d.onKeyDown,"keyup.dragon":d.onKeyDown}),("Info"in window&&Info||console).log("DragOn landed...")),d.on=!d.on,null!=b&&a.trigger("BarOn.toggle"),d},getCurPos:function(){var b,c=a.to;return a.curPos={t:c[0].scrollTop,ph:b=c.innerHeight(),maxY:c[0].scrollHeight-b,l:c[0].scrollLeft,pw:b=c.innerWidth(),maxX:c[0].scrollWidth-b}},setCurPos:function(b,c){for(var e,f,h,i,g=a.to,j=d.mx<0||d.my<0;a.to=d.scrollParent(a.to,j);){if(g=d.getCurPos(),g.maxY>0&&(c>0?c:-c)>(b>0?b:-b)&&(g.maxX>0||(b=0),h=g.t-(h=d.round((g.maxY/g.ph+1)*c))<0?g.t:g.t-h>g.maxY?g.t-g.maxY:h)&&(a.to[0].scrollTop=g.t-h,!0)&&(e=a.to[0].scrollTop!=g.t)&&(c=0,a.to.trigger("scroll")),g.maxX>0&&(b>0?b:-b)>(c>0?c:-c)&&(c=0,i=g.l-(i=d.round((g.maxX/g.pw+1)*b))<0?g.l:g.l-i>g.maxX?g.l-g.maxX:i)&&(a.to[0].scrollLeft=g.l-i,!0)&&(f=a.to[0].scrollLeft!=g.l)&&(b=0,a.to.trigger("scroll")),c&&e||b&&f||a[0]==a.to[0])return;a.to=a.to.parent()}},scrollParent:function(b,c){for(;b&&b[0]&&a[0]!=b[0]&&(1!=b[0].nodeType||"visible"==b.css("overflow")||"a"==b[0].tagName.toLowerCase()||!c&&"no-dragon"==b.data("overflow"));)b=b.parent();return b},isInBestPosition:function(a,b,c){var d=a.offset(),e=b.offset(),f=b.innerHeight()-c.ph,g=b.innerWidth()-c.pw;return(b[0]==document.body||b[0]==$("html")[0]&&b[0]!==a[0])&&(d.top=d.top-b[0].scrollTop,d.left=d.left-b[0].scrollLeft),e.top+(f<0?0:f)>=d.top&&e.top+(f>0?0:f)<=d.top&&e.left+(g<0?0:g)>=d.left&&e.left+(g>0?0:g)<=d.left||"fixed"==a.css("position")},onWhell:function(b,c){if(d.bypass)return d.bypass=!1,!0;d.moment={};var e,f,i,n;E=b.originalEvent,d.mx=1,d.my=1,a.to=$(this===b.target?this:b.target),c=d.round(c||(E.wheelDelta||E.wheelDeltaY||E.wheelDeltaX)>>1||-(E.deltaX||E.deltaY||E.deltaZ)<<(E.deltaMode&&E.deltaMode<<2)<<1),n=d.abs(c>>1);do a.to=d.scrollParent(a.to,1),a.too=(e=a.to[0]!=a[0])?d.scrollParent(a.to.parent(),1):a,f=d.getCurPos(),d.isInBestPosition(a.to,a.too,f)&&(f.maxY>0&&(a.to.scrollTop((i=f.t-c)<0?0:i>f.maxY?f.maxY:i),a.to.scrollTop()!=f.t&&(b.preventDefault(),b.stopPropagation(),a.to.trigger("scroll",[!1,!1]),c=0)),c&&f.maxX>0&&(a.to.scrollLeft((i=f.l-c)>0?i>f.maxX?f.maxX:i:0),a.to.scrollLeft()!=f.l&&(b.preventDefault(),b.stopPropagation(),a.to.trigger("scroll",[!0,!0]),c=0)));while(c&&e&&(a.to=a.to.parent()));return this},onHold:function(b){d.moment={};var c=d.opt,f=(b.target.tagName||b.target.localName||b.target.nodeName).toLowerCase(),g=b.type.indexOf("touch")+1?b.originalEvent.touches[0]:b;f in c.exclusion||(a.too=a.to=$(this===b.target?this:b.target),d.mx=a.to.hasClass("bBarOn")?-1:1,d.my=a.to.hasClass("rBarOn")?-1:1,d.mx+d.my>0&&a.too.closest(c.exclusion.id).length||("mousedown".indexOf(b.type)+1&&(b.preventDefault(),b.stopPropagation()),d.moment=a.holdPos={x:g.screenX,y:g.screenY},d.moment.startTime=+new Date,a.on(c.draggEvents,d.onDragg).on(c.releaseEvents+" "+c.leaveEvents,d.onRelease).on(c.releaseEvents,a.too,d.onRelease),d.noButtonHold=!1,d.SAH&&d.SAH.off("scroll.dragon",d.onScrollAfterHold),(d.SAH=a.too).on("scroll.dragon",d.onScrollAfterHold)))},onScrollAfterHold:function(a){d.moment={},d.noButtonHold=!0,d.SAH.off("scroll.dragon",d.onScrollAfterHold)},onDragg:function(b){d.SAH&&(d.SAH.off("scroll.dragon",d.onScrollAfterHold),d.SAH=null);var c=b.type.indexOf("touch")+1?b.originalEvent[b.originalEvent.touches.length?"touches":"changedTouches"][0]:b;if(!b.originalEvent.touches&&!b.originalEvent.changedTouches&&d.noButtonHold&&!(b.which+b.button))return d.onRelease(b);b.preventDefault(),b.stopPropagation();var e=c.screenX,f=c.screenY,g=e-a.holdPos.x,h=f-a.holdPos.y;a.to=$(this===b.target?this:b.target),a.holdPos={x:e,y:f},d.setCurPos(g*d.mx,h*d.my)},onRelease:function(b){var c=d.moment,e=d.opt,f=b.type.indexOf("touch")+1?b.originalEvent[b.originalEvent.touches.length?"touches":"changedTouches"][0]:b;return c&&e.easing?(c.vector={y:f.screenY-c.y,x:f.screenX-c.x},c.snatch=+new Date-c.startTime,c.speedX=d.mx*(c.vector.x>0?1:-1)*c.vector.x*c.vector.x/(c.snatch<<1),c.speedY=d.my*(c.vector.y>0?1:-1)*c.vector.y*c.vector.y/(c.snatch<<1),c.snatch<350&&(c.ORE=setTimeout(d.onReleaseEasing,10))):d.moment=null,"mouseup mouseleave".indexOf(b.type)+1&&(b.preventDefault(),b.stopPropagation(),b.stopImmediatePropagation()),d.SAH&&(d.SAH.off("scroll.dragon",d.onScrollAfterHold),d.SAH=null),a.off(e.draggEvents,d.onDragg).off(e.releaseEvents+" "+e.leaveEvents,d.onRelease).off(e.releaseEvents,"**",d.onRelease),d},onReleaseEasing:function(b){var c=d.moment;c&&(a.to=a.too,d.setCurPos(c.speedX*=.98,c.speedY*=.98),c.ORE=c.speedX+c.speedX<<1>>1||c.speedY+c.speedY<<1>>1?setTimeout(d.onReleaseEasing,10):null)},onKeyDown:function(b){var c,e,f,j,g=b.which,h=d.moment||{},i=$(window).innerHeight();if(h.speedX=g in{37:0,100:0}?2:g in{39:0,102:0}?-2:0,h.speedY=g in{38:0,104:0}?1:g in{40:0,98:0}?-1:g in{33:0,105:0}?(c=Math.sqrt(Math.sqrt(i)))*Math.sqrt(c/3)-4:g in{34:0,99:0}?-(c=Math.sqrt(Math.sqrt(i)))*Math.sqrt(c/3)+4:g in{35:0,97:0}?-88:g in{36:0,103:0}?88:0,!(!h.speedX&&!h.speedY||(j=d.abs(h.speedY))>15&&"keydown"==b.type||j<15&&"keyup"==b.type)){if(h.key!=g){for(h.key=g,e=f=$(a);e.length&&!(h.speedY&&e[0].scrollHeight-e.innerHeight()>2&&(c=e.offset()).left<=(g=$(window).innerWidth()-e.innerWidth())&&(c.left>=0||g<0&&c.left>=g)||h.speedX&&e[0].scrollWidth-e.innerWidth()>2&&(c=e.offset()).top<=(g=i-e.innerHeight())&&(c.top>=0||g<0&&c.top>=g));)(e=e.slice(1)).length||(e=f=f.children());a.too=e.eq(0)||a.too}d.onReleaseEasing(),b.preventDefault(),b.stopPropagation()}}},a.on({"DragOn.toggle":d.toggle,"DragOn.remove":function(){d.on||d.toggle(),Bo=null,a.off("DragOn.toggle DragOn.remove DragOn.option")},"DragOn.option":function(a,b){return a&&a.stopPropagation(),b?"object"==typeof b?d.option=b:d.option[b]:d.option}}),d.toggle()}}),$(".dragon").dragOn()});