我试图弄清楚如何用户的鼠标用jQuery在HTML 5画布上命中一行。
以下是生成画布线的代码:
<canvas id="myCanvas" width="400" height="400" style="border:1px solid #c3c3c3;">
Your browser does not support the canvas element.
</canvas>
<script type="text/javascript" src="js/jquery-1.4.2.min.js"></script>
<script type="text/javascript">
window.onload = function(){
var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
ctx.moveTo(40,0);
ctx.lineTo(40,360);
ctx.stroke();
ctx.moveTo(80,400);
ctx.lineTo(80,40);
ctx.stroke();
ctx.moveTo(120,0);
ctx.lineTo(120,360);
ctx.stroke();
ctx.moveTo(160,400);
ctx.lineTo(160,40);
ctx.stroke();
};
</script>
我正在使用我在其他问题中实际找到的修改过的jQuery脚本,但现在我无法弄清楚如何在画布中检测线条,主要是颜色从白色到黑色的差异。我知道这可以通过图像来完成,但我还没有见过像这样的人。
我想我真正的问题是,有没有办法用jQuery检测canvas元素的颜色变化?
答案 0 :(得分:6)
它可以用javascript做。实际上你在上面的例子中没有使用任何jQuery。一种简单的方法是从画布中抓取像素数据,并检查指定x和y位置的alpha。如果alpha未设置为0,那么您在画布上绘制了一些内容。下面是我快速拼凑的功能。
<强> Live Demo 强>
var canvas = document.getElementById("canvas"),
ctx = canvas.getContext("2d"),
width = 400;
height = 400;
canvas.width = canvas.height = 200;
// draw
ctx.moveTo(40, 0);
ctx.lineTo(40, 360);
ctx.stroke();
ctx.moveTo(80, 400);
ctx.lineTo(80, 40);
ctx.stroke();
ctx.moveTo(120, 0);
ctx.lineTo(120, 360);
ctx.stroke();
ctx.moveTo(160, 400);
ctx.lineTo(160, 40);
ctx.stroke();
function detectLine(x, y) {
var imageData = ctx.getImageData(0, 0, width, height),
inputData = imageData.data,
pData = (~~x + (~~y * width)) * 4;
if (inputData[pData + 3]) {
return true;
}
return false;
}
canvas.addEventListener("mousemove", function(e){
var x = e.pageX,
y = e.pageY;
console.log(detectLine(x, y));
});
console.log(detectLine(40, 100));
console.log(detectLine(200, 200));