Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit a812cac

Browse files
committed
Implement touch event handlers
1 parent d6f233d commit a812cac

File tree

1 file changed

+18
-0
lines changed

1 file changed

+18
-0
lines changed

src/index.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

183199
interface 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

Comments
 (0)