Mic*_*son 2 jquery html5 canvas mouseover
我试图找出如何检测用户的鼠标是否使用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>
Run Code Online (Sandbox Code Playgroud)
我正在使用一个修改过的jQuery脚本,我实际上在这里找到了另一个问题,但现在我无法弄清楚如何在画布中检测线条,主要是颜色从白色到黑色的差异.我知道这可以通过图像来完成,但我还没有见过像这样的人.
我想我真正的问题是,有没有办法用jQuery检测canvas元素的颜色变化?
它可以用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));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2393 次 |
| 最近记录: |