diff --git a/src/ColorPicker/index.tsx b/src/ColorPicker/index.tsx index 7c28c207..0ab2ba4a 100644 --- a/src/ColorPicker/index.tsx +++ b/src/ColorPicker/index.tsx @@ -59,6 +59,8 @@ export class ColorPicker extends React.Component onChangedColor(colorHexString)); } - handleChooseColor = (e: React.MouseEvent, isClickEvent = true) => { - if (isClickEvent && e.type === "mousedown") { - window.addEventListener("mousemove", this.handleMouseMove); - window.addEventListener("mouseup", this.handleMouseUp); + handleChooseColor = (e: React.MouseEvent | React.TouchEvent, isClickEvent = true) => { + e.preventDefault(); + const isTouchEvent = e.type.includes("touch"); + + if (isClickEvent && (e.type === "mousedown" || e.type === "touchstart")) { + document.documentElement.addEventListener("mousemove", this.handleTouchMouseMove, false); + document.documentElement.addEventListener("mouseup", this.handleEnd); + this.canvas.addEventListener("touchmove", this.handleTouchMouseMove, false); + document.documentElement.addEventListener("touchend", this.handleEnd); Object.assign(document.body.style, { userSelect: "none", msUserSelect: "none", @@ -159,8 +168,10 @@ export class ColorPicker extends React.Component).changedTouches[0] : (e as React.MouseEvent); + const { clientY } = isTouchEvent ? (e as React.TouchEvent).changedTouches[0] : (e as React.MouseEvent); + const x = clientX - clientReact.left - colorPickerBoardSize; + const y = clientReact.top - clientY + colorPickerBoardSize; const r = Math.sqrt(x * x + y * y); let h = Math.asin(y / r) / Math.PI * 180; if (x > 0 && y > 0) h = 360 - h; @@ -197,14 +208,14 @@ export class ColorPicker extends React.Component { + handleTouchMouseMove = (e: any) => { if (!this.state.dragging) { this.setState({ dragging: true }); } this.handleChooseColor(e, false); } - handleMouseUp = (e: any) => { + handleEnd = (e: any) => { if (this.state.dragging) { this.setState({ dragging: false }); } @@ -216,8 +227,10 @@ export class ColorPicker extends React.Component this.canvas = canvas} - onMouseDown={this.handleChooseColor} - onMouseUp={this.handleMouseUp} onClick={this.handleChooseColor} + onMouseDown={this.handleChooseColor} + onMouseUp={this.handleEnd} > Your Browser not support canvas. @@ -267,8 +280,7 @@ export class ColorPicker extends React.Component