2

我试图弄清楚如何检测用户的鼠标是否使用 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 检测画布元素上的颜色变化?

4

1 回答 1

6

它可能与javascript有关。实际上,您在上面的示例中没有使用任何 jQuery。一种简单的方法是从画布中获取像素数据,并检查指定 x 和 y 位置的 alpha。如果 alpha 未设置为 0,那么您在画布上绘制了一些东西。下面是我快速组合起来的一个功能。

现场演示

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));
于 2013-03-10T18:30:01.707 回答