Javascript 如何将事件侦听器添加到画布中的图像?
我需要在画布中的图像上附加一些鼠标事件 我试过了,但还是不行Javascript 如何将事件侦听器添加到画布中的图像?,javascript,html,canvas,Javascript,Html,Canvas,我需要在画布中的图像上附加一些鼠标事件 我试过了,但还是不行 var pointer = new Image(); pointer.src = "/img/line_point.png"; pointer.onload = function() { context.drawImage(pointer, 55,123); } pointer.addEventListener("mouseover", maap, false); 您需要将事件
var pointer = new Image();
pointer.src = "/img/line_point.png";
pointer.onload = function() {
context.drawImage(pointer, 55,123);
}
pointer.addEventListener("mouseover", maap, false);
您需要将事件侦听器添加到画布元素,然后手动检查事件x和y参数是否在画布上绘制的图像上。您需要将事件侦听器添加到画布元素,然后手动检查事件x和y参数是否在画布上绘制的图像上。a
canvas
没有一个结构来记忆绘制到其中的对象。它只是一个有像素的平面
画布。如果需要使用其中的对象,请切换到。Javascript中有许多SVG
库。比如
使用普通svg,您可以像
<svg width="4in" height="3in" version="1.1" xmlns="http://www.w3.org/2000/svg">
<image id="myImg" x="200" y="200" width="100px" height="100px"></image>
</svg>
您甚至可以使用document.getElementById('myImg')
或jQuery('#myImg')
向其中添加事件
如果您想继续使用画布,请将事件侦听器添加到画布本身并检查坐标。a
Canvas
没有用于记住绘制到其中的对象的结构。它只是一个有像素的平面
画布。如果需要使用其中的对象,请切换到。Javascript中有许多SVG
库。比如
使用普通svg,您可以像
<svg width="4in" height="3in" version="1.1" xmlns="http://www.w3.org/2000/svg">
<image id="myImg" x="200" y="200" width="100px" height="100px"></image>
</svg>
您甚至可以使用document.getElementById('myImg')
或jQuery('#myImg')
向其中添加事件
如果您想坚持使用画布,请向画布本身添加一个事件侦听器并检查坐标。如果您想这样附加事件,最好使用SVG。如果您想这样附加事件,最好使用SVG。将画布想象成教室中的白板。无论老师在白板上写什么或画什么,都是白板的一部分,你不能选择任何一个。如果你想从板上挑选一些东西,你可以使用软板,在软板上放置物体,然后将它们从一个位置移动到另一个位置。SVG是软板的一个示例,这里的每个图形(如直线、圆弧)都是对象,您可以在它们上添加单击侦听器
如果希望画布的行为类似于SVG,则必须对其进行处理。您可以在画布上添加click listener,并且无论何时在其上接收到事件,都需要计算该事件发生在哪个元素上 把画布想象成教室里的白板。无论老师在白板上写什么或画什么,都是白板的一部分,你不能选择任何一个。如果你想从板上挑选一些东西,你可以使用软板,在软板上放置物体,然后将它们从一个位置移动到另一个位置。SVG是软板的一个示例,这里的每个图形(如直线、圆弧)都是对象,您可以在它们上添加单击侦听器
如果希望画布的行为类似于SVG,则必须对其进行处理。您可以在画布上添加click listener,并且无论何时在其上接收到事件,都需要计算该事件发生在哪个元素上 使用David Geary的最新优秀著作《核心HTML5画布》中的相关样本来复兴旧线程。这在我的应用程序中运行良好
mycanvas.onmousedown = function (e) {
var loc = windowToCanvas(e.clientX, e.clientY);
$('#outputXY').val(loc.x + ',' + loc.y);
};
mycanvas.onmousemove = function (e) {
var loc = windowToCanvas(e.clientX, e.clientY);
$('#outputXY').val(loc.x + ',' + loc.y);
};
function windowToCanvas(x, y) {
var r = mycanvas.getBoundingClientRect();
return { x: x - r.left * (mycanvas.width / r.width),
y: y - r.top * (mycanvas.height / r.height)};
};
用DavidGeary最近出版的优秀书籍《核心HTML5画布》中的相关样本来复活旧线程。这在我的应用程序中运行良好
mycanvas.onmousedown = function (e) {
var loc = windowToCanvas(e.clientX, e.clientY);
$('#outputXY').val(loc.x + ',' + loc.y);
};
mycanvas.onmousemove = function (e) {
var loc = windowToCanvas(e.clientX, e.clientY);
$('#outputXY').val(loc.x + ',' + loc.y);
};
function windowToCanvas(x, y) {
var r = mycanvas.getBoundingClientRect();
return { x: x - r.left * (mycanvas.width / r.width),
y: y - r.top * (mycanvas.height / r.height)};
};
有可能找到更灵活的解决方案吗?事件侦听器绑定到元素。您仅有的元素是canvas元素。是否有可能找到更灵活的解决方案?事件侦听器绑定到元素。您仅有的元素是canvas元素。请像使用canvas库一样使用。下面的答案是什么样的代码?我也有同样的问题!使用画布库。下面的答案是什么样的代码?我也有同样的问题!