javascript - 在移动 Canvas 上绘图

标签 javascript html canvas

我正在尝试在 Canvas 上绘图以制作一个简单的绘图板。它在电脑上运行良好。但在手机上,我只能“画”一个点,不能拖动。我不明白可能是什么问题,因为我有一个 touchmove 事件。

这是我的代码片段:

    canvas.addEventListener("mousedown", mouseDown, false);
    canvas.addEventListener("mousemove", mouseXY, false);
    document.body.addEventListener("mouseup", mouseUp, false);

    //For mobile
    canvas.addEventListener("touchstart", mouseDown, false);
    canvas.addEventListener("touchmove", mouseXY, true);
    canvas.addEventListener("touchend", mouseUp, false);
    document.body.addEventListener("touchcancel", mouseUp, false);

    function draw() {
        context.clearRect(0, 0, canvas.width, canvas.height); // Clears the canvas

        context.strokeStyle = "#000000";  //set the "ink" color
        context.lineJoin = "miter";       //line join
        context.lineWidth = 2;            //"ink" width

        for (var i = 0; i < clickX.length; i++) {
            context.beginPath();                               //create a path
            if (clickDrag[i] && i) {
                context.moveTo(clickX[i - 1], clickY[i - 1]);  //move to
            } else {
                context.moveTo(clickX[i] - 1, clickY[i]);      //move to
            }
            context.lineTo(clickX[i], clickY[i]);              //draw a line
            context.stroke();                                  //filled with "ink"
            context.closePath();                               //close path
        }
    }

    function addClick(x, y, dragging) {
        clickX.push(x);
        clickY.push(y);
        clickDrag.push(dragging);
    }

    function mouseXY(e) {
       if (paint) {
                addClick(e.pageX - this.offsetLeft, e.pageY - this.offsetTop - 40, true);
                draw();
             }
    }

    function mouseUp() {
      paint = false;
    }

    function mouseDown(e)
    {
      var mouseX = e.pageX - this.offsetLeft;
            var mouseY = e.pageY - this.offsetTop;
            paint = true;
            addClick(e.pageX - this.offsetLeft, e.pageY - this.offsetTop - 40);
            draw();
    }

最佳答案

问题可能是事件正在冒泡并导致移动设备出现问题。要阻止默认的滚动操作,请尝试以下操作...

function mouseXY(e) {
    e.preventDefault();
    e.stopPropagation();
    if (paint) {
        addClick(e.pageX - this.offsetLeft, e.pageY - this.offsetTop - 40, true);
        draw();
    }
    return false;
}


function mouseDown(e) {
    e.preventDefault();
    e.stopPropagation();    
    var mouseX = e.pageX - this.offsetLeft;
    var mouseY = e.pageY - this.offsetTop;
    paint = true;
    addClick(e.pageX - this.offsetLeft, e.pageY - this.offsetTop - 40);
    draw();
    return false;
}

关于javascript - 在移动 Canvas 上绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36128402/

相关文章:

javascript - 滚动条上错误的输入自动完成位置(chrome)

javascript - 调整顶部横幅图像大小的最佳方式 (viewport/html)

javascript - 在 DOM 上执行多个指令

android - 在 Android 中使用缩放查看并在 Canvas 上画线

javascript - JavaScript 中的序数

javascript - 高性能网站通常使用哪种 JavaScript 框架?

javascript - localStorage 分配与 setItem()

jquery - Bootstrap 4 中 Carousel 整页图像 slider 和多 div slider 的冲突

javascript - 如何使用 toDataURL 从 Canvas 发送图像到 php

javascript - HTML5 canvas 在桌面浏览器上工作正常,但在 Android 上不行