@@ -40,6 +40,13 @@ function moveCropArea(event: TouchEvent | MouseEvent | KeyboardEvent) {
4040 const pos = dragStartPositions . get ( el ) !
4141 deltaX = event . pageX - pos . dragStartX
4242 deltaY = event . pageY - pos . dragStartY
43+ } else if ( dragStartPositions . has ( el ) && event instanceof TouchEvent ) {
44+ // Only support a single touch at a time
45+ const { pageX, pageY} = event . changedTouches [ 0 ]
46+
47+ const { dragStartX, dragStartY} = dragStartPositions . get ( el ) !
48+ deltaX = pageX - dragStartX
49+ deltaY = pageY - dragStartY
4350 }
4451
4552 if ( deltaX !== 0 || deltaY !== 0 ) {
@@ -90,6 +97,11 @@ function updateCropArea(event: TouchEvent | MouseEvent | KeyboardEvent) {
9097 if ( ! pos ) return
9198 deltaX = event . pageX - pos . startX - rect . left - window . pageXOffset
9299 deltaY = event . pageY - pos . startY - rect . top - window . pageYOffset
100+ } else if ( event instanceof TouchEvent ) {
101+ const pos = startPositions . get ( el )
102+ if ( ! pos ) return
103+ deltaX = event . changedTouches [ 0 ] . pageX - pos . startX - rect . left - window . pageXOffset
104+ deltaY = event . changedTouches [ 0 ] . pageY - pos . startY - rect . top - window . pageYOffset
93105 }
94106
95107 if ( deltaX && deltaY ) updateDimensions ( el , deltaX , deltaY , ! ( event instanceof KeyboardEvent ) )
@@ -111,6 +123,7 @@ function startUpdate(event: TouchEvent | MouseEvent) {
111123 const direction = target . getAttribute ( 'data-direction' ) || ''
112124 // Change crop area
113125 el . addEventListener ( 'mousemove' , updateCropArea )
126+ el . addEventListener ( 'touchmove' , updateCropArea )
114127 if ( [ 'nw' , 'se' ] . indexOf ( direction ) >= 0 ) el . classList . add ( 'nwse' )
115128 if ( [ 'ne' , 'sw' ] . indexOf ( direction ) >= 0 ) el . classList . add ( 'nesw' )
116129 startPositions . set ( el , {
@@ -121,6 +134,7 @@ function startUpdate(event: TouchEvent | MouseEvent) {
121134 } else {
122135 // Move crop area
123136 el . addEventListener ( 'mousemove' , moveCropArea )
137+ el . addEventListener ( 'touchmove' , moveCropArea )
124138 }
125139}
126140
@@ -178,6 +192,8 @@ function stopUpdate(event: TouchEvent | MouseEvent) {
178192 el . classList . remove ( 'nwse' , 'nesw' )
179193 el . removeEventListener ( 'mousemove' , updateCropArea )
180194 el . removeEventListener ( 'mousemove' , moveCropArea )
195+ el . removeEventListener ( 'touchmove' , updateCropArea )
196+ el . removeEventListener ( 'touchmove' , moveCropArea )
181197}
182198
183199interface Result {
@@ -214,8 +230,10 @@ class ImageCropElement extends HTMLElement {
214230
215231 image . addEventListener ( 'load' , imageReady )
216232 this . addEventListener ( 'mouseleave' , stopUpdate )
233+ this . addEventListener ( 'touchend' , stopUpdate )
217234 this . addEventListener ( 'mouseup' , stopUpdate )
218235 box . addEventListener ( 'mousedown' , startUpdate )
236+ box . addEventListener ( 'touchstart' , startUpdate )
219237 this . addEventListener ( 'keydown' , moveCropArea )
220238 this . addEventListener ( 'keydown' , updateCropArea )
221239
0 commit comments