有没有办法获得画布的子元素?

时间:2014-11-10 11:58:11

标签: javascript html5 angularjs canvas

我创建了一个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);
}

1 个答案:

答案 0 :(得分:0)

画布2d api引入了一种所谓的"立即模式"。这意味着,api不会跟踪绘制的形状和对象。它会在画完之后忘记画的内容。

因此,您必须自己跟踪图像。您可以使用 ImageModels 列表执行此操作,如下所示:

var images = [];
images[0] = {x: 100,
             y: 100,
             width : 300,
             height : 400,
             imageData};

为画布上已删除并绘制的每个图像创建一个类似上面的对象,并将其添加到列表中。之后,您只需迭代MouseListener中的列表 images ,并测试当前鼠标坐标是否在列表中的其中一个图像中。然后,您可以在新坐标处重新绘制图像