我创建了一个canvas元素。在这里,我从工具栏中拖放图像。现在我想得到Image,它是关于鼠标移动事件的位置。但无法获得图像。我只想在鼠标悬停在图像上时移动图像,而不是在鼠标位于画布边界内时移动图像。
我的代码示例:
$scope.moves = function () {
x = document.getElementById("canvasOne");
canvas = x.getContext("2d");
img = document.getElementById("gn");
x.addEventListener("dragenter", function (e) {
e.preventDefault();
}, false);
x.addEventListener("dragover", function (e) {
e.preventDefault();
}, false);
x.addEventListener("drop", droped, false);
};
function droped(e) {
var xpos = e.clientX;
var ypos = e.clientY;
canvas.drawImage(img, xpos, ypos);
}
function moving(e) {
canvas.clearRect(0, 0, x.width, x.height);
var xpos = e.clientX;
var ypos = e.clientY;
canvas.drawImage(img, xpos - 250, ypos - 250);
}
答案 0 :(得分:0)
画布2d api引入了一种所谓的"立即模式"。这意味着,api不会跟踪绘制的形状和对象。它会在画完之后忘记画的内容。
因此,您必须自己跟踪图像。您可以使用 ImageModels 列表执行此操作,如下所示:
var images = [];
images[0] = {x: 100,
y: 100,
width : 300,
height : 400,
imageData};
为画布上已删除并绘制的每个图像创建一个类似上面的对象,并将其添加到列表中。之后,您只需迭代MouseListener中的列表 images ,并测试当前鼠标坐标是否在列表中的其中一个图像中。然后,您可以在新坐标处重新绘制图像