scale.min.js 10 KB

1
  1. !function(){var n={},t={},e={},i={};n=function(n){function t(){}function e(n,e){var i;return Object.create?i=Object.create(n):(t.prototype=n,i=new t),i.constructor=e,i}function i(n,t){if(n){if(n.nodeType)return[n];var t=t&&t.nodeType?t:document;return n&&"string"==typeof n?t.querySelectorAll(n):void 0}}for(var r=/\\?\{([^{}]+)\}/g,a="",s=/^[\s\xa0]+|[\s\xa0]+$/g,o=String.prototype.trim,l=o?function(n){return null==n?a:o.call(n)}:function(n){return null==n?a:(n+"").replace(s,a)},c=0,u=function(n){var t=n.offsetTop;return null!=n.offsetParent&&(t+=u(n.offsetParent)),t},f=function(n){var t=n.offsetLeft;return null!=n.offsetParent&&(t+=f(n.offsetParent)),t},h=({isObject:function(n){return n===Object(n)},isArray:Array.isArray||function(n){return"[object Array]"==toString.call(n)},isEmpty:function(n){if(null==n)return!0;if(this.isArray(n)||this.isString(n))return 0===n.length;for(var t in n)if(this.has(n,t))return!1;return!0},mix:function(n,t,e){for(var i in t)n[i]=t[i];return n},extend:function(n,t,i,r){if(!t||!n)return n;var a,s=t.prototype;return a=e(s,n),n.prototype=this.mix(a,n.prototype),n.superclass=e(s,t),i&&this.mix(a,i),r&&this.mix(n,r),n},startsWith:function(n,t){return 0===n.lastIndexOf(t,0)},endsWith:function(n,t){var e=n.length-t.length;return e>=0&&n.indexOf(t,e)===e},trim:l,substitute:function(n,t,e){return"string"==typeof n&&t?n.replace(e||r,function(n,e){return"\\"===n.charAt(0)?n.slice(1):void 0===t[e]?a:t[e]}):n},vendor:function(){for(var n,t=document.createElement("div").style,e=["t","webkitT","MozT","msT","OT"],i=0,r=e.length;i<r;i++)if(n=e[i]+"ransform",n in t)return e[i].substr(0,e[i].length-1);return!1}(),prefixStyle:function(n){return this.vendor!==!1&&(""===this.vendor?n:this.vendor+n.charAt(0).toUpperCase()+n.substr(1))},hasClass:function(n,t){return n&&n.className&&t&&n.className.indexOf(t)!=-1},addClass:function(n,t){n&&t&&!this.hasClass(n,t)&&(n.className+=" "+t)},removeClass:function(n,t){n&&n.className&&t&&(n.className=n.className.replace(t,""))},remove:function(n){n&&n.parentNode&&n.parentNode.removeChild(n)},getOffsetTop:u,getOffsetLeft:f,findParentEl:function(n,t,e){var i=null,r=null,a=/^#/.test(t)?"id":/^\./.test(t)?"class":"tag",s=t.replace(/\.|#/g,"");if(e&&"string"==typeof e&&(e=document.querySelector(e)),e=e||document.body,n&&t){if("class"==a&&n.className&&n.className.match(s))return n;if("id"==a&&n.id&&l(n.id)==s)return n;if("tag"==a&&n.tagName.toLowerCase()==s)return n;for(;!i&&r!=e&&(r=n.parentNode);){if("class"==a&&r.className&&r.className.match(s)||"id"==a&&r.id&&l(r.id)==s||"tag"==a&&r.tagName&&r.tagName.toLowerCase()==s)return i=r;n=r}return null}},guid:function(n){var t=++c+"";return n?n+t:t},isAndroid:function(){return/Android /.test(window.navigator.appVersion)},isBadAndroid:function(){return/Android /.test(window.navigator.appVersion)&&!/Chrome\/\d/.test(window.navigator.appVersion)},px2Num:function(n){return Number(n.replace(/px/,""))},getNodes:i,getNode:function(n,t){var e=i(n,t);return e&&e[0]},stringifyStyle:function(n){var t="";for(var e in n)t+=[e,":",n[e],";"].join("");return t}}),g=["Arguments","Function","String","Number","Date","RegExp"],p=0;p<g.length;p++)h["is"+g[p]]=function(n){return toString.call(n)=="[object "+g[p]+"]"};return"object"==typeof module&&module.exports?n=h:h}(n),t=function(t){var e=n,i=function(n){var t,e=!1;return function(){return e?t:(e=!0,t=n.apply(this,arguments),n=null,t)}},r={on:function(n,t,e){if(!s(this,"on",n,[t,e])||!t)return this;this._events||(this._events={});var i=this._events[n]||(this._events[n]=[]);return i.push({callback:t,context:e,ctx:e||this}),this},once:function(n,t,e){if(!s(this,"once",n,[t,e])||!t)return this;var r=this,a=i(function(){r.off(n,a),t.apply(this,arguments)});return a._callback=t,this.on(n,a,e)},off:function(n,t,e){if(!this._events||!s(this,"off",n,[t,e]))return this;if(!n&&!t&&!e)return this._events=void 0,this;for(var i=n?[n]:Object.keys(this._events),r=0,a=i.length;r<a;r++){n=i[r];var o=this._events[n];if(o)if(t||e){for(var l=[],c=0,u=o.length;c<u;c++){var f=o[c];(t&&t!==f.callback&&t!==f.callback._callback||e&&e!==f.context)&&l.push(f)}l.length?this._events[n]=l:delete this._events[n]}else delete this._events[n]}return this},trigger:function(n){if(!this._events)return this;var t=Array.prototype.slice.call(arguments,1);if(!s(this,"trigger",n,t))return this;var e=this._events[n],i=this._events.all;return e&&o(e,t),i&&o(i,arguments),this},listenTo:function(n,t,i){var r=this._listeningTo||(this._listeningTo={}),a=n._listenId||(n._listenId=e.guid("l"));return r[a]=n,i||"object"!=typeof t||(i=this),n.on(t,i,this),this},listenToOnce:function(n,t,e){if("object"==typeof t){for(var r in t)this.listenToOnce(n,r,t[r]);return this}var a=i(function(){this.stopListening(n,t,a),e.apply(this,arguments)});return a._callback=e,this.listenTo(n,t,a)},stopListening:function(n,t,i){var r=this._listeningTo;if(!r)return this;var a=!t&&!i;i||"object"!=typeof t||(i=this),n&&((r={})[n._listenId]=n);for(var s in r)n=r[s],n.off(t,i,this),(a||e.isEmpty(n._events))&&delete this._listeningTo[s];return this}},a=/\s+/,s=function(n,t,e,i){if(!e)return!0;if("object"==typeof e){for(var r in e)n[t].apply(n,[r,e[r]].concat(i));return!1}if(a.test(e)){for(var s=e.split(a),o=0,l=s.length;o<l;o++)n[t].apply(n,[s[o]].concat(i));return!1}return!0},o=function(n,t){var e,i=-1,r=n.length,a=t[0],s=t[1],o=t[2];switch(t.length){case 0:for(;++i<r;)(e=n[i]).callback.call(e.ctx);return;case 1:for(;++i<r;)(e=n[i]).callback.call(e.ctx,a);return;case 2:for(;++i<r;)(e=n[i]).callback.call(e.ctx,a,s);return;case 3:for(;++i<r;)(e=n[i]).callback.call(e.ctx,a,s,o);return;default:for(;++i<r;)(e=n[i]).callback.apply(e.ctx,t);return}};return r.bind=r.on,r.unbind=r.off,"object"==typeof module&&module.exports?t=r:r}(t),e=function(e){var i=n,r=t,a=function(){};return i.mix(a.prototype,r),i.mix(a.prototype,{plug:function(n){var t=this;if(n&&n.pluginId){t.__plugins||(t.__plugins=[]);var e=t.getPlugin(n.pluginId);return e&&t.unplug(n.pluginId),n.pluginInitializer(t),t.__plugins.push(n),t}},unplug:function(n){var t=this;if(n&&t.__plugins){var e="string"==typeof n?t.getPlugin(n):n;e.pluginDestructor(t);for(var i=0,r=t.__plugins.length;i<r;i++)if(t.__plugins[i]==e)return t.__plugins.splice(i,1)}},getPlugin:function(n){var t=this,e=[];if(t.__plugins){for(var i=0,r=t.__plugins.length;i<r;i++)t.__plugins[i]&&t.__plugins[i].pluginId==n&&e.push(t.__plugins[i]);return e.length>1?e:e[0]||null}}}),"object"==typeof module&&module.exports?e=a:a}(e),i=function(t){var i=n,r=e,a=300,s=function(n){s.superclass.constructor.call(this,n),this.userConfig=i.mix({minScale:1,maxScale:2,duration:a},n)};if(i.extend(s,r,{pluginId:"scale",pluginInitializer:function(n){var t=this;return t.scale=1,t.xscroll=n.render(),t.initialContainerWidth=n.containerWidth,t.initialContainerHeight=n.containerHeight,t.minScale=t.userConfig.minScale||Math.max(n.width/n.containerWidth,n.height/n.containerHeight),t.maxScale=t.userConfig.maxScale||1,t._bindEvt(),t},pluginDestructor:function(){var n=this,t=n.xscroll;return t.off("doubletap",n._doubleTapHandler,n),t.off("pinchstart",n._pinchStartHandler,n),t.off("pinchmove",n._pinchHandler,n),t.off("pinchend pinchcancel",n._pinchEndHandler,n),n},_doubleTapHandler:function(n){var t=this,e=t.xscroll,i=t.userConfig.minScale,r=t.userConfig.maxScale,a=t.userConfig.duration;return t.originX=(n.center.x-e.x)/e.containerWidth,t.originY=(n.center.y-e.y)/e.containerHeight,e.scale>t.minScale?t.scaleTo(i,t.originX,t.originY,a):t.scaleTo(r,t.originX,t.originY,a),t},_pinchStartHandler:function(n){var t=this,e=t.xscroll;t.disablePan(),e.stop(),t.isScaling=!1,t.scale=e.scale,t.originX=(n.center.x-e.x)/e.containerWidth,t.originY=(n.center.y-e.y)/e.containerHeight},_pinchHandler:function(n){var t=this,e=t.scale,i=t.xscroll,r=t.originX,a=t.originY,s=e*n.scale;s<=t.userConfig.minScale&&(s=.5*t.userConfig.minScale*Math.pow(2,s/t.userConfig.minScale)),s>=t.userConfig.maxScale&&(s=2*t.userConfig.maxScale*Math.pow(.5,t.userConfig.maxScale/s)),t._scale(s,r,a),t.xscroll.translate(i.x,i.y,s,"e.scale",n.scale)},disablePan:function(){return this.xscroll.mc.get("pan").set({enable:!1}),this},enablePan:function(){return this.xscroll.mc.get("pan").set({enable:!0}),this},_pinchEndHandler:function(n){var t=this,e=t.originX,i=t.originY,r=t.xscroll;r.scale<t.minScale?t.scaleTo(t.minScale,e,i,a,"ease-out",t.enablePan):r.scale>t.maxScale?t.scaleTo(t.maxScale,e,i,a,"ease-out",t.enablePan):t.enablePan()},_bindEvt:function(){var n=this,t=n.xscroll;return t.on("doubletap",n._doubleTapHandler,n),t.on("pinchstart",n._pinchStartHandler,n),t.on("pinchmove",n._pinchHandler,n),t.on("pinchend pinchcancel",n._pinchEndHandler,n),n},_scale:function(n,t,e){var i=this,r=i.xscroll,a=i.xscroll.boundry;if(r.scale!=n&&n){i.isScaling||(i.scaleBegin=r.scale,i.isScaling=!0,i.scaleBeginX=r.x,i.scaleBeginY=r.y),t&&(i.originX=t),e&&(i.originY=e);var s=n*i.initialContainerWidth,o=n*i.initialContainerHeight;r.containerWidth=Math.round(s>r.width?s:r.width),r.containerHeight=Math.round(o>r.height?o:r.height),r.scale=n;var l=t*(i.initialContainerWidth*i.scaleBegin-r.containerWidth)+i.scaleBeginX,c=e*(i.initialContainerHeight*i.scaleBegin-r.containerHeight)+i.scaleBeginY;l>a.left&&(l=a.left),c>a.top&&(c=a.top),l<a.right-r.containerWidth&&(l=a.right-r.containerWidth),c<a.bottom-r.containerHeight&&(c=a.bottom-r.containerHeight),r.x=l,r.y=c}},scaleTo:function(n,t,e,i,r,s){var o=this,l=o.xscroll;if(l.scale!=n&&n){var i=i||a,r=r||"ease-out";o.scaleStart=l.scale||1,o._scale(n,t,e),l._animate("x","translateX("+l.x+"px) scale("+n+")",i,r,function(n){s&&s.call(o,n)}),l._animate("y","translateY("+l.y+"px)",i,r,function(n){s&&s.call(o,n)}),l.__timers.x.timer.off("run",o.scaleHandler,o),l.__timers.x.timer.off("stop",o.scaleendHandler,o),o.scaleHandler=function(i){var r=(n-o.scaleStart)*i.percent+o.scaleStart;o.trigger("scale",{scale:r,origin:{x:t,y:e}})},o.scaleendHandler=function(n){o.isScaling=!1,o.enablePan(),o.trigger("scaleend",{type:"scaleend",scale:o.scale,origin:{x:t,y:e}})},l.__timers.x.timer.on("run",o.scaleHandler,o),l.__timers.x.timer.on("stop",o.scaleendHandler,o),o.trigger("scaleanimate",{type:"scaleanimate",scale:l.scale,duration:i,easing:r,offset:{x:l.x,y:l.y},origin:{x:t,y:e}})}}}),"object"==typeof module&&module.exports)t=s;else if(window.XScroll&&window.XScroll.Plugins)return XScroll.Plugins.Scale=s;return t}(i)}();