feat: 画笔工具支持触摸优化

This commit is contained in:
pipipi-pikachu 2021-05-20 21:34:38 +08:00
parent d67862f282
commit 323835a3db

View File

@ -4,8 +4,8 @@
@mousedown="$event => handleMousedown($event)" @mousedown="$event => handleMousedown($event)"
@mousemove="$event => handleMousemove($event)" @mousemove="$event => handleMousemove($event)"
@mouseup="handleMouseup()" @mouseup="handleMouseup()"
@touchstart.prevent="$event => { handleTouchdown($event);mouseInCanvas = true }" @touchstart="$event => handleMousedown($event)"
@touchmove.prevent="$event => handleTouchmove($event)" @touchmove="$event => handleMousemove($event)"
@touchend="handleMouseup(); mouseInCanvas = false" @touchend="handleMouseup(); mouseInCanvas = false"
@mouseleave="handleMouseup(); mouseInCanvas = false" @mouseleave="handleMouseup(); mouseInCanvas = false"
@mouseenter="mouseInCanvas = true" @mouseenter="mouseInCanvas = true"
@ -70,16 +70,11 @@ export default defineComponent({
x: 0, x: 0,
y: 0, y: 0,
}) })
// //
const updateMousePosition = (e: MouseEvent | TouchEvent) => { const updateMousePosition = (x: number, y: number) => {
if (e instanceof MouseEvent) { mouse.x = x
mouse.x = e.pageX mouse.y = y
mouse.y = e.pageY
}
else if (e instanceof TouchEvent) {
mouse.x = e.targetTouches[0].clientX
mouse.y = e.targetTouches[0].clientY
}
} }
// //
@ -170,15 +165,9 @@ export default defineComponent({
const v = s / t const v = s / t
let lineWidth let lineWidth
if (v <= minV) { if (v <= minV) lineWidth = maxWidth
lineWidth = maxWidth else if (v >= maxV) lineWidth = minWidth
} else lineWidth = maxWidth - v / maxV * maxWidth
else if (v >= maxV) {
lineWidth = minWidth
}
else {
lineWidth = maxWidth - v / maxV * maxWidth
}
if (lastLineWidth === -1) return lineWidth if (lastLineWidth === -1) return lineWidth
return lineWidth * 1 / 3 + lastLineWidth * 2 / 3 return lineWidth * 1 / 3 + lastLineWidth * 2 / 3
@ -196,43 +185,36 @@ export default defineComponent({
draw(x, y, lineWidth) draw(x, y, lineWidth)
lastLineWidth = lineWidth lastLineWidth = lineWidth
} }
else { else erase(x, y)
erase(x, y)
}
lastPos = {x, y} lastPos = {x, y}
lastTime = new Date().getTime() lastTime = new Date().getTime()
} }
// //
const handleTouchdown = (e: TouchEvent) => {
// mouseInCanvas.value = true
isMouseDown = true
lastPos = {x: e.targetTouches[0].clientX, y: e.targetTouches[0].clientY}
lastTime = new Date().getTime()
}
const handleTouchmove = (e: TouchEvent) => {
updateMousePosition(e)
if (!isMouseDown) return
handleMove(e.targetTouches[0].clientX, e.targetTouches[0].clientY)
}
//
// / // /
const handleMousedown = (e: MouseEvent) => { const handleMousedown = (e: MouseEvent | TouchEvent) => {
const x = e instanceof MouseEvent ? e.offsetX : e.changedTouches[0].pageX
const y = e instanceof MouseEvent ? e.offsetY : e.changedTouches[0].pageY
isMouseDown = true isMouseDown = true
lastPos = {x: e.offsetX, y: e.offsetY} lastPos = { x, y }
lastTime = new Date().getTime() lastTime = new Date().getTime()
if (e instanceof TouchEvent) {
updateMousePosition(x, y)
mouseInCanvas.value = true
}
} }
// / // /
const handleMousemove = (e: MouseEvent) => { const handleMousemove = (e: MouseEvent | TouchEvent) => {
updateMousePosition(e) const x = e instanceof MouseEvent ? e.offsetX : e.changedTouches[0].pageX
const y = e instanceof MouseEvent ? e.offsetY : e.changedTouches[0].pageY
if (!isMouseDown) return updateMousePosition(x, y)
handleMove(e.offsetX, e.offsetY)
if (isMouseDown) handleMove(x, y)
} }
// / // /
@ -258,8 +240,6 @@ export default defineComponent({
handleMousemove, handleMousemove,
handleMouseup, handleMouseup,
clearCanvas, clearCanvas,
handleTouchdown,
handleTouchmove
} }
}, },
}) })