gpt4 book ai didi

javascript - 如何检测鼠标指针是否命中已在 HTML 5 Canvas 上绘制的线条

转载 作者:太空宇宙 更新时间:2023-11-04 14:41:33 25 4
gpt4 key购买 nike

我正在尝试弄清楚如何使用 jQuery 检测用户的鼠标是否点击了 HTML 5 Canvas 上的一行。

这是生成 Canvas 线条的代码:

<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 脚本,我实际上是在此处的另一个问题中找到的,但现在我不知道如何检测 Canvas 中的线条,主要是从白色到黑色的颜色差异。我知道这可以用图像来完成,但我还没有看到任何人用过这样的东西。

我想我真正的问题是,有没有一种方法可以使用 jQuery 检测 Canvas 元素上的颜色变化?

最佳答案

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

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));

关于javascript - 如何检测鼠标指针是否命中已在 HTML 5 Canvas 上绘制的线条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15325283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com