@@ -30,46 +30,63 @@ const frame = new Frame({
3030function setTransform ( target : HTMLElement | SVGElement ) {
3131 target . style . cssText = frame . toCSS ( ) ;
3232}
33- function setLabel ( clientX : number , clientY : number , text ) {
33+ function setLabel ( clientX : number , clientY : number , text : string ) {
3434 // tslint:disable-next-line: max-line-length
35- labelElement . style . cssText = `display: block; transform: translate(${ clientX } px, ${ clientY - 10 } px) translate(-100%, -100%);` ;
35+
36+ labelElement . style . cssText = `
37+ display: block; transform: translate(${ clientX } px, ${ clientY - 10 } px) translate(-100%, -100%);` ;
38+
3639 labelElement . innerHTML = text ;
3740}
41+
42+
3843const moveable = new Moveable ( moveableElement . parentElement , {
3944 target : moveableElement ,
40- container : moveableElement . parentElement ,
4145 origin : false ,
4246 draggable : true ,
4347 rotatable : true ,
4448 scalable : true ,
49+ pinchable : true ,
4550 keepRatio : false ,
4651 throttleDrag : 1 ,
4752 throttleScale : 0.01 ,
4853 throttleRotate : 0.2 ,
4954 throttleResize : 1 ,
50- } ) . on ( "drag" , ( { target, left, top, clientX, clientY } ) => {
55+ } ) . on ( "pinch" , ( { clientX, clientY } ) => {
56+ setTimeout ( ( ) => {
57+ setLabel ( clientX , clientY , `X: ${ frame . get ( "left" ) }
58+ <br/>Y: ${ frame . get ( "top" ) }
59+ <br/>W: ${ frame . get ( "width" ) }
60+ <br/>H: ${ frame . get ( "height" ) }
61+ <br/>S: ${ frame . get ( "transform" , "scaleX" ) . toFixed ( 2 ) } , ${ frame . get ( "transform" , "scaleY" ) . toFixed ( 2 ) }
62+ <br/>R: ${ parseFloat ( frame . get ( "transform" , "rotate" ) ) . toFixed ( 1 ) } deg
63+ ` ) ;
64+ } ) ;
65+ } ) . on ( "drag" , ( { target, left, top, clientX, clientY, isPinch } ) => {
5166 frame . set ( "left" , `${ left } px` ) ;
5267 frame . set ( "top" , `${ top } px` ) ;
5368 setTransform ( target ) ;
54- setLabel ( clientX , clientY , `X: ${ left } px<br/>Y: ${ top } px` ) ;
55- } ) . on ( "scale" , ( { target, dist, clientX, clientY } ) => {
69+ ! isPinch && setLabel ( clientX , clientY , `X: ${ left } px<br/>Y: ${ top } px` ) ;
70+
71+ } ) . on ( "scale" , ( { target, dist, clientX, clientY, isPinch } ) => {
5672 const scaleX = frame . get ( "transform" , "scaleX" ) * dist [ 0 ] ;
5773 const scaleY = frame . get ( "transform" , "scaleY" ) * dist [ 1 ] ;
5874 frame . set ( "transform" , "scaleX" , scaleX ) ;
5975 frame . set ( "transform" , "scaleY" , scaleY ) ;
6076 setTransform ( target ) ;
61- setLabel ( clientX , clientY , `S: ${ scaleX . toFixed ( 2 ) } , ${ scaleY . toFixed ( 2 ) } ` ) ;
62- } ) . on ( "rotate" , ( { target, beforeDelta, clientX, clientY } ) => {
77+ ! isPinch && setLabel ( clientX , clientY , `S: ${ scaleX . toFixed ( 2 ) } , ${ scaleY . toFixed ( 2 ) } ` ) ;
78+
79+ } ) . on ( "rotate" , ( { target, beforeDelta, clientX, clientY, isPinch } ) => {
6380 const deg = parseFloat ( frame . get ( "transform" , "rotate" ) ) + beforeDelta ;
6481
6582 frame . set ( "transform" , "rotate" , `${ deg } deg` ) ;
6683 setTransform ( target ) ;
67- setLabel ( clientX , clientY , `R: ${ deg . toFixed ( 1 ) } ` ) ;
68- } ) . on ( "resize" , ( { target, width, height, clientX, clientY } ) => {
84+ ! isPinch && setLabel ( clientX , clientY , `R: ${ deg . toFixed ( 1 ) } ` ) ;
85+ } ) . on ( "resize" , ( { target, width, height, clientX, clientY, isPinch } ) => {
6986 frame . set ( "width" , `${ width } px` ) ;
7087 frame . set ( "height" , `${ height } px` ) ;
7188 setTransform ( target ) ;
72- setLabel ( clientX , clientY , `W: ${ width } px<br/>H: ${ height } px` ) ;
89+ ! isPinch && setLabel ( clientX , clientY , `W: ${ width } px<br/>H: ${ height } px` ) ;
7390} ) . on ( "warp" , ( { target, multiply, delta, clientX, clientY } ) => {
7491 frame . set ( "transform" , "matrix3d" , multiply ( frame . get ( "transform" , "matrix3d" ) , delta ) ) ;
7592 setTransform ( target ) ;
@@ -89,7 +106,6 @@ const moveable = new Moveable(moveableElement.parentElement, {
89106const draggableElement : HTMLElement = document . querySelector ( ".draggable" ) ;
90107const draggable = new Moveable ( draggableElement . parentElement , {
91108 target : draggableElement ,
92- container : draggableElement . parentElement ,
93109 origin : false ,
94110 draggable : true ,
95111} ) . on ( "drag" , ( { target, transform } ) => {
@@ -99,7 +115,6 @@ const draggable = new Moveable(draggableElement.parentElement, {
99115const resizableElement : HTMLElement = document . querySelector ( ".resizable" ) ;
100116const resizable = new Moveable ( resizableElement . parentElement , {
101117 target : resizableElement ,
102- container : resizableElement . parentElement ,
103118 origin : false ,
104119 resizable : true ,
105120} ) . on ( "resize" , ( { target, width, height } ) => {
@@ -110,7 +125,6 @@ const resizable = new Moveable(resizableElement.parentElement, {
110125const scalableElement : HTMLElement = document . querySelector ( ".scalable" ) ;
111126const scalable = new Moveable ( scalableElement . parentElement , {
112127 target : scalableElement ,
113- container : scalableElement . parentElement ,
114128 origin : false ,
115129 scalable : true ,
116130} ) . on ( "scale" , ( { target, transform } ) => {
@@ -120,7 +134,6 @@ const scalable = new Moveable(scalableElement.parentElement, {
120134const rotatableElement : HTMLElement = document . querySelector ( ".rotatable" ) ;
121135const rotatable = new Moveable ( rotatableElement . parentElement , {
122136 target : rotatableElement ,
123- container : rotatableElement . parentElement ,
124137 origin : false ,
125138 rotatable : true ,
126139} ) . on ( "rotate" , ( { target, transform } ) => {
@@ -129,7 +142,6 @@ const rotatable = new Moveable(rotatableElement.parentElement, {
129142const warpableElement : HTMLElement = document . querySelector ( ".warpable" ) ;
130143const warpable = new Moveable ( warpableElement . parentElement , {
131144 target : warpableElement ,
132- container : warpableElement . parentElement ,
133145 warpable : true ,
134146 origin : false ,
135147} ) . on ( "warp" , ( { target, transform } ) => {
@@ -139,7 +151,6 @@ const warpable = new Moveable(warpableElement.parentElement, {
139151const originElement : HTMLElement = document . querySelector ( ".origin" ) ;
140152const origin = new Moveable ( originElement . parentElement , {
141153 target : originElement ,
142- container : originElement . parentElement ,
143154 origin : true ,
144155 draggable : true ,
145156 rotatable : true ,
@@ -150,13 +161,32 @@ const origin = new Moveable(originElement.parentElement, {
150161 target . style . transform = transform ;
151162} ) ;
152163
164+ const pinchableElement : HTMLElement = document . querySelector ( ".pinchable" ) ;
165+ const scale = [ 1 , 1 ] ;
166+ let rotate = 0 ;
167+ const pinchable = new Moveable ( pinchableElement . parentElement , {
168+ target : pinchableElement ,
169+ pinchable : [ "rotatable" , "scalable" ] ,
170+ origin : false ,
171+ } ) . on ( "rotate" , ( { beforeDelta } ) => {
172+ rotate += beforeDelta ;
173+
174+ pinchableElement . style . transform = `scale(${ scale . join ( ", " ) } ) rotate(${ rotate } deg)` ;
175+ } ) . on ( "scale" , ( { delta } ) => {
176+ scale [ 0 ] += delta [ 0 ] ;
177+ scale [ 1 ] += delta [ 1 ] ;
178+
179+ pinchableElement . style . transform = `scale(${ scale . join ( ", " ) } ) rotate(${ rotate } deg)` ;
180+ } ) ;
181+
153182window . addEventListener ( "resize" , ( ) => {
154183 moveable . updateRect ( ) ;
155184 draggable . updateRect ( ) ;
156185 resizable . updateRect ( ) ;
157186 scalable . updateRect ( ) ;
158187 rotatable . updateRect ( ) ;
159188 warpable . updateRect ( ) ;
189+ pinchable . updateRect ( ) ;
160190} ) ;
161191
162192document . addEventListener ( "DOMContentLoaded" , ( ) => {
0 commit comments