2 lines
1.6 KiB
JavaScript
2 lines
1.6 KiB
JavaScript
/*! angular-pinch-zoom - v0.2.1 */
|
|
angular.module("ngPinchZoom",[]).directive("ngPinchZoom",function(){function n(n,t,e){function i(n){var t=n.originalEvent?n.originalEvent.touches:n.touches;I=t[0].clientX,k=t[0].clientY,Y=w,d=X,M=0,S=0}function c(n){var e=n.originalEvent?n.originalEvent.touches:n.touches;""===u&&(1===e.length&&g>1?u="swipe":2===e.length&&(u="pinch",p=g,f=o(e),E=e[0].clientX-parseInt((e[0].clientX-e[1].clientX)/2,10)-t[0].offsetLeft-Y,b=e[0].clientY-parseInt((e[0].clientY-e[1].clientY)/2,10)-t[0].offsetTop-d)),"swipe"===u?(n.preventDefault(),M=e[0].clientX-I,S=e[0].clientY-k,w=Y+M,X=d+S,a()):"pinch"===u&&(n.preventDefault(),h=o(e),v=h/f,g=v*p,w=E*(1-v)+Y+M,X=b*(1-v)+d+S,a())}function r(n){var t=n.originalEvent?n.originalEvent.touches:n.touches;""===u||t.length>0||(1>g?(g=1,w=0,X=0):g>m?(g=m,v=g/p,w=E*(1-v)+Y+M,X=b*(1-v)+d+S):(w>0?w=0:l*(1-g)>w&&(w=l*(1-g)),X>0?X=0:s*(1-g)>X&&(X=s*(1-g))),a(.1),u="")}function o(n){var t=Math.sqrt(Math.pow(n[0].clientX-n[1].clientX,2)+Math.pow(n[0].clientY-n[1].clientY,2));return parseInt(t,10)}function a(n){var e=n?"all cubic-bezier(0,0,.5,1) "+n+"s":"",i=[g,0,0,g,w,X],c="matrix("+i.join(",")+")";t.css({"-webkit-transition":e,transition:e,"-webkit-transform":c+" translate3d(0,0,0)",transform:c})}var l,s,u="",h=0,f=0,g=1,v=1,p=1,m=parseInt(e.maxScale,10);(isNaN(m)||1>=m)&&(m=3);var w=0,X=0,Y=0,d=0,E=0,b=0,I=0,k=0,M=0,S=0,x=new Image;x.onload=function(){l=t[0].clientWidth,s=t[0].clientHeight,t.css({"-webkit-transform-origin":"0 0","transform-origin":"0 0"}),t.on("touchstart",i),t.on("touchmove",c),t.on("touchend",r)},e.ngSrc?x.src=e.ngSrc:x.src=e.src}var t={restrict:"A",scope:!1,link:n};return t}); |