我有一个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);
});
});
如何将这些听众绑定到所有画布?
感谢。
答案 0 :(得分: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');