@@ -40,6 +40,13 @@ function moveCropArea(event: TouchEvent | MouseEvent | KeyboardEvent) {
40
40
const pos = dragStartPositions . get ( el ) !
41
41
deltaX = event . pageX - pos . dragStartX
42
42
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
43
50
}
44
51
45
52
if ( deltaX !== 0 || deltaY !== 0 ) {
@@ -90,6 +97,11 @@ function updateCropArea(event: TouchEvent | MouseEvent | KeyboardEvent) {
90
97
if ( ! pos ) return
91
98
deltaX = event . pageX - pos . startX - rect . left - window . pageXOffset
92
99
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
93
105
}
94
106
95
107
if ( deltaX && deltaY ) updateDimensions ( el , deltaX , deltaY , ! ( event instanceof KeyboardEvent ) )
@@ -111,6 +123,7 @@ function startUpdate(event: TouchEvent | MouseEvent) {
111
123
const direction = target . getAttribute ( 'data-direction' ) || ''
112
124
// Change crop area
113
125
el . addEventListener ( 'mousemove' , updateCropArea )
126
+ el . addEventListener ( 'touchmove' , updateCropArea )
114
127
if ( [ 'nw' , 'se' ] . indexOf ( direction ) >= 0 ) el . classList . add ( 'nwse' )
115
128
if ( [ 'ne' , 'sw' ] . indexOf ( direction ) >= 0 ) el . classList . add ( 'nesw' )
116
129
startPositions . set ( el , {
@@ -121,6 +134,7 @@ function startUpdate(event: TouchEvent | MouseEvent) {
121
134
} else {
122
135
// Move crop area
123
136
el . addEventListener ( 'mousemove' , moveCropArea )
137
+ el . addEventListener ( 'touchmove' , moveCropArea )
124
138
}
125
139
}
126
140
@@ -178,6 +192,8 @@ function stopUpdate(event: TouchEvent | MouseEvent) {
178
192
el . classList . remove ( 'nwse' , 'nesw' )
179
193
el . removeEventListener ( 'mousemove' , updateCropArea )
180
194
el . removeEventListener ( 'mousemove' , moveCropArea )
195
+ el . removeEventListener ( 'touchmove' , updateCropArea )
196
+ el . removeEventListener ( 'touchmove' , moveCropArea )
181
197
}
182
198
183
199
interface Result {
@@ -214,8 +230,10 @@ class ImageCropElement extends HTMLElement {
214
230
215
231
image . addEventListener ( 'load' , imageReady )
216
232
this . addEventListener ( 'mouseleave' , stopUpdate )
233
+ this . addEventListener ( 'touchend' , stopUpdate )
217
234
this . addEventListener ( 'mouseup' , stopUpdate )
218
235
box . addEventListener ( 'mousedown' , startUpdate )
236
+ box . addEventListener ( 'touchstart' , startUpdate )
219
237
this . addEventListener ( 'keydown' , moveCropArea )
220
238
this . addEventListener ( 'keydown' , updateCropArea )
221
239
0 commit comments