Я собираюсь добавить к ответу Grassator, добавив ссылку на этот ответ, которая более подробно описывает код, необходимый для работы этого решения: https://stackoverflow.com/a/16630678/5843693.
Методы для canvas - всевызывается в ящике следующим образом:
var drawer = {
isDrawing: false,
touchstart: function (coors) {
ctx.beginPath();
ctx.moveTo(coors.x, coors.y);
this.isDrawing = true;
},
touchmove: function (coors) {
if (this.isDrawing) {
ctx.lineTo(coors.x, coors.y);
ctx.stroke();
}
},
touchend: function (coors) {
if (this.isDrawing) {
this.touchmove(coors);
this.isDrawing = false;
}
}
};
Кроме того, EventListener
s специально заказываются так, чтобы сенсорный ввод выполнялся первым:
var touchAvailable = ('createTouch' in document) || ('onstarttouch' in window);
if (touchAvailable) {
canvas.addEventListener('touchstart', draw, false);
canvas.addEventListener('touchmove', draw, false);
canvas.addEventListener('touchend', draw, false);
} else {
canvas.addEventListener('mousedown', draw, false);
canvas.addEventListener('mousemove', draw, false);
canvas.addEventListener('mouseup', draw, false);
}
Наконец, "эластичный""прокрутка предотвращается добавлением еще одного EventListener ближе к концу кода.
document.body.addEventListener('touchmove', function (event) {
event.preventDefault();
}, false);
Все это находится внутри window.addEventListener('load', function () {})
.