0

我有一个带有如下标签的 HTML 文档:

<div class="sign"></div>

我想用代表标志视图的画布替换这些标签(用户可以触摸移动和绘制),所以我已经绑定了监听器。

问题是只有第一个画布有侦听器,并且可以在上面绘制。

$(document).ready(function () {


    $('.sign').each(function () {


        var canvas = $("<canvas/>");
        canvas[0].width = 200;
        canvas[0].height = 100;
        canvas[0].setAttribute("style", "border:1px solid #000000");

        var ctx = canvas.get(0).getContext('2d');
        ctx.strokeStyle = "rgba(0,0,0,1)";
        ctx.lineWidth = 2;
        ctx.lineCap = 'round';

        $(this).append(canvas);


        canvas.bind("touchstart", function () {

            ctx.moveTo(event.touches[0].pageX, event.touches[0].pageY);
        });

        canvas.bind("touchmove", function () {
            ctx.lineTo(event.touches[0].pageX, event.touches[0].pageY);
            ctx.stroke();
        });

        var br = $("<br/>");
        $(this).append(br);

        var btn = document.createElement('input');
        btn.setAttribute("type", "button");
        btn.setAttribute("value", "Clear");
        btn.setAttribute("onclick", "clearSignature()");

        $(this).append(btn);

    });

});

我如何将这些听众绑定到所有画布?

谢谢。

4

1 回答 1

0

我会删除循环bind内部each(),我会简单地在它之后附加处理程序(使用事件委托),例如

$('body')
  .on("touchstart", 'canvas', function () {
    var ctx = this.getContext('2d');
    ctx.moveTo(event.touches[0].pageX, event.touches[0].pageY);
  })
  .on("touchmove", 'canvas', function () {
    var ctx = this.getContext('2d');
    ctx.lineTo(event.touches[0].pageX, event.touches[0].pageY);
    ctx.stroke();
  });

假设应该检索上下文var ctx = this.getContext('2d');

于 2012-10-02T11:03:08.970 回答