【问题标题】:Draw with finger in html on ipad?在 ipad 上用手指在 html 中绘图?
【发布时间】:2012-10-04 08:21:32
【问题描述】:

我正在尝试用手指在画布元素中书写。它适用于桌面浏览器,但不适用于 ipad。
我也尝试使用 touchstart、touchend、touchmove 事件,但它在 ipad 上不起作用。

var pizarra_canvas
var pizarra_context

function init(){            
    pizarra_canvas = document.getElementById("pizarra");
    pizarra_context = pizarra_canvas.getContext("2d");
    pizarra_context.strokeStyle = "#000";
    pizarra_canvas.addEventListener('mousedown',empezarPintar,false);
    pizarra_canvas.addEventListener('mouseup',terminarPintar,false);
    }   

function empezarPintar(e){
pizarra_context.beginPath();
pizarra_context.moveTo(e.clientX-pizarra_canvas.offsetLeft,e.clientY-pizarra_canvas.offsetTop);
pizarra_canvas.addEventListener('mousemove',pintar,false)
}

function terminarPintar(e){
pizarra_canvas.removeEventListener('mousemove',pintar,false);
}

function pintar(e) {
pizarra_context.lineTo(e.clientX-pizarra_canvas.offsetLeft,e.clientY-pizarra_canvas.offsetTop);
pizarra_context.stroke();
}

【问题讨论】:

    标签: javascript ipad html canvas touch


    【解决方案1】:

    您需要取消默认事件(即滚动)。此外,最好在文档上触发 mouseup/touchend,因为如果您离开拖动区域并释放按钮,那么画布不知道它应该停止绘制。

    var pizarra_canvas
    var pizarra_context
    
    function init(){            
        pizarra_canvas = document.getElementById("pizarra");
        pizarra_context = pizarra_canvas.getContext("2d");
        pizarra_context.strokeStyle = "#000";
        pizarra_canvas.addEventListener('mousedown',empezarPintar,false);
        pizarra_canvas.addEventListener('touchstart',empezarPintar,false);
        document.addEventListener('mouseup',terminarPintar,false);
        document.addEventListener('touchend',terminarPintar,false);
        }   
    
    function empezarPintar(e){
      e.preventDefault();
      pizarra_context.beginPath();
      pizarra_context.moveTo(e.pageX-pizarra_canvas.offsetLeft,e.pageY-pizarra_canvas.offsetTop);
      pizarra_canvas.addEventListener('mousemove',pintar,false)
      pizarra_canvas.addEventListener('touchmove',pintar,false)
    }
    
    function terminarPintar(e){
      e.preventDefault();
      pizarra_canvas.removeEventListener('mousemove',pintar,false);
      pizarra_canvas.addEventListener('touchmove',pintar,false)
    }
    
    function pintar(e) {
      e.preventDefault();
      pizarra_context.lineTo(e.clientX-pizarra_canvas.offsetLeft,e.clientY-pizarra_canvas.offsetTop);
      pizarra_context.stroke();
    }
    init();
    

    另外,你的 css 在触控设备上应该有这样的东西:

    body, html {
      height: 100%;
      overflow: hidden;
    }​
    

    【讨论】:

    • 首先,谢谢。现在,当您触摸画布元素时,页面不会滚动,但仍不会绘画。
    • 使用 e.pageXe.pageY 而不是 e.clientXe.clientY 并让我知道这是否有效。我已经更新了答案中的代码。
    • 完美运行!!穆哈斯·格拉西亚斯!!我知道问题与 touchEvent clientX 属性的名称有关,但我没有找到任何相关信息。你能告诉我你是在哪里找到这些信息的吗?
    • 我记得遇到过和你一样的问题,我发现这个页面可以检查触摸事件gregmurray.org/ipad/touch-events.html,但此时它似乎对我不利。 Tal vez tengas más suerte.
    猜你喜欢
    • 1970-01-01
    • 2013-03-08
    • 1970-01-01
    • 1970-01-01
    • 2013-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-09
    相关资源
    最近更新 更多