Skip to content

Commit 26d9500

Browse files
committed
full touch events
1 parent da6f36a commit 26d9500

File tree

1 file changed

+30
-22
lines changed

1 file changed

+30
-22
lines changed

src/mouse.js

Lines changed: 30 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import {event} from "./utils.js"
2+
import { defined } from "../libs/web-js-utils.js";
23

34
let state ={over_vertex:false,id:0,coord:{x:0,y:0},offset:{x:0,y:0},dragging:false,acting:false,menu:false};
45

@@ -9,12 +10,16 @@ function onContext(e){
910

1011
function onMousePan(e){
1112
const is_vertex = e.target.classList.contains("vertex")
12-
let dx = e.clientX - state.coord.x;
13-
let dy = e.clientY - state.coord.y;
14-
let vdx = e.offsetX - state.offset.x;
15-
let vdy = e.offsetY - state.offset.y;
16-
if(e.type == "mousemove"){
17-
//console.log(state)
13+
let pointe_1 = defined(e.buttons)?(e.buttons == 1):(e.touches.length == 1)
14+
let pointe_2 = defined(e.buttons)?(e.buttons == 2):(e.touches.length == 2)
15+
let pointer_x = defined(e.offsetX)?e.offsetX: ((e.touches.length>0)?(e.touches[0].pageX):state.offset.x)
16+
let pointer_y = defined(e.offsetY)?e.offsetY: ((e.touches.length>0)?(e.touches[0].pageY):state.offset.y)
17+
let vdx = pointer_x - state.offset.x;
18+
let vdy = pointer_y - state.offset.y;
19+
//console.log(`tx:${vdx},ty:${vdy} px:${e.touches[0].PageX},py:${e.touches[0].PageY}`)
20+
//console.log(e)
21+
if(["mousemove","touchmove"].includes(e.type)){
22+
//console.log(`dragging:${state.dragging} , over_vertex:${state.over_vertex}`)
1823
if(!state.dragging && !state.menu){//then no update for the hover state machine
1924
if(is_vertex){
2025
if(!state.over_vertex){
@@ -35,36 +40,38 @@ function onMousePan(e){
3540
}
3641
}
3742
}
38-
if((e.buttons == 1) && state.dragging){
43+
if(pointe_1 && state.dragging){
44+
//console.log(e)
45+
//console.log(`tx:${vdx},ty:${vdy}`)
3946
event("vertex_drag",{type:"move",tx:vdx,ty:vdy})
4047
}
41-
if(!is_vertex && (e.buttons != 1) && (e.buttons == 2) && !state.menu){
48+
if(!is_vertex && !pointe_1 && pointe_2 && !state.menu){
4249
if(state.over_vertex){
4350
state.over_vertex = false
4451
event("vertex_hover",{type:"exit",id:state.id})
4552
}
4653
}
47-
}else if(e.type == "mousedown"){
48-
if((e.buttons == 1) && is_vertex){
54+
}else if(["mousedown","touchstart"].includes(e.type)){
55+
if(pointe_1 && is_vertex){
4956
state.dragging = true
5057
state.id = e.target.id
5158
event("vertex_drag",{type:"start",id:state.id})
52-
}else if((e.buttons == 2) && is_vertex){
59+
}else if(pointe_2 && is_vertex){
5360
state.menu = true
5461
state.id = e.target.id
5562
event("vertex_menu",{type:"start",id:state.id})
5663
}
57-
}else if(e.type == "mouseup"){
64+
}else if(["mouseup","touchend"].includes(e.type)){
5865
if(state.dragging){
5966
state.dragging = false
6067
event("vertex_drag",{type:"end",id:state.id})
6168
}
6269
}
63-
state.coord.x = e.clientX;
64-
state.coord.y = e.clientY;
65-
state.offset.x = e.offsetX;
66-
state.offset.y = e.offsetY;
67-
e.preventDefault();
70+
state.offset.x = pointer_x;
71+
state.offset.y = pointer_y;
72+
if(!["touchstart","touchend","touchmove"].includes(e.type)){
73+
e.preventDefault();
74+
}
6875
e.stopPropagation();
6976
}
7077

@@ -77,11 +84,12 @@ class Mouse{
7784
init(element){
7885

7986
element.addEventListener( 'touchstart', onMousePan, false );
80-
element.addEventListener( 'touchend', onMousePan, false );
81-
element.addEventListener( 'mousedown', onMousePan, false );
82-
element.addEventListener( 'mouseup', onMousePan, false );
83-
element.addEventListener( 'mousemove', onMousePan, false );
84-
element.addEventListener( 'contextmenu', onContext, false );
87+
element.addEventListener( 'touchend', onMousePan, false );
88+
element.addEventListener( 'touchmove', onMousePan, false );
89+
element.addEventListener( 'mousedown', onMousePan, false );
90+
element.addEventListener( 'mouseup', onMousePan, false );
91+
element.addEventListener( 'mousemove', onMousePan, false );
92+
element.addEventListener( 'contextmenu',onContext, false );
8593
window.addEventListener( 'vertex_menu', onVertexMenu, false );
8694

8795
}

0 commit comments

Comments
 (0)