fix touches

This commit is contained in:
Pavel Dobryakov
2019-08-26 11:08:11 +02:00
parent 3c36a98bcd
commit 2ca3e06132

View File

@@ -1423,6 +1423,8 @@ canvas.addEventListener('mousedown', e => {
let posX = scaleByPixelRatio(e.offsetX); let posX = scaleByPixelRatio(e.offsetX);
let posY = scaleByPixelRatio(e.offsetY); let posY = scaleByPixelRatio(e.offsetY);
let pointer = pointers.find(p => p.id == -1); let pointer = pointers.find(p => p.id == -1);
if (pointer == null)
pointer = new pointerPrototype();
updatePointerDownData(pointer, -1, posX, posY); updatePointerDownData(pointer, -1, posX, posY);
}); });
@@ -1433,18 +1435,18 @@ canvas.addEventListener('mousemove', e => {
}); });
window.addEventListener('mouseup', () => { window.addEventListener('mouseup', () => {
updatePoinerUpData(pointers[0]); updatePointerUpData(pointers[0]);
}); });
canvas.addEventListener('touchstart', e => { canvas.addEventListener('touchstart', e => {
e.preventDefault(); e.preventDefault();
const touches = e.targetTouches; const touches = e.targetTouches;
for (let i = 0; i < touches.length; i++) { while (touches.length >= pointers.length)
if (i >= pointers.length)
pointers.push(new pointerPrototype()); pointers.push(new pointerPrototype());
for (let i = 0; i < touches.length; i++) {
let posX = scaleByPixelRatio(touches[i].pageX); let posX = scaleByPixelRatio(touches[i].pageX);
let posY = scaleByPixelRatio(touches[i].pageY); let posY = scaleByPixelRatio(touches[i].pageY);
updatePointerDownData(pointers[i], touches[i].identifier, posX, posY); updatePointerDownData(pointers[i + 1], touches[i].identifier, posX, posY);
} }
}); });
@@ -1454,16 +1456,17 @@ canvas.addEventListener('touchmove', e => {
for (let i = 0; i < touches.length; i++) { for (let i = 0; i < touches.length; i++) {
let posX = scaleByPixelRatio(touches[i].pageX); let posX = scaleByPixelRatio(touches[i].pageX);
let posY = scaleByPixelRatio(touches[i].pageY); let posY = scaleByPixelRatio(touches[i].pageY);
updatePointerMoveData(pointers[i], posX, posY); updatePointerMoveData(pointers[i + 1], posX, posY);
} }
}, false); }, false);
window.addEventListener('touchend', e => { window.addEventListener('touchend', e => {
const touches = e.changedTouches; const touches = e.changedTouches;
for (let i = 0; i < touches.length; i++) for (let i = 0; i < touches.length; i++)
for (let j = 0; j < pointers.length; j++) {
if (touches[i].identifier == pointers[j].id) let pointer = pointers.find(p => p.id == touches[i].identifier);
updatePoinerUpData(pointers[j]); updatePointerUpData(pointer);
}
}); });
window.addEventListener('keydown', e => { window.addEventListener('keydown', e => {
@@ -1496,7 +1499,7 @@ function updatePointerMoveData (pointer, posX, posY) {
pointer.deltaY = correctDeltaY(pointer.texcoordY - pointer.prevTexcoordY); pointer.deltaY = correctDeltaY(pointer.texcoordY - pointer.prevTexcoordY);
} }
function updatePoinerUpData (pointer) { function updatePointerUpData (pointer) {
pointer.down = false; pointer.down = false;
} }