我可以使javascript图像对象互动吗?

时间:2015-05-03 17:38:25

标签: javascript html css canvas

我有一个CSS背景图像设置到我的画布;这是一张地图。

然后我在地图顶部的各个点上“绘制”红色图钉图像。每个引脚都被绘制为具有不同名称但具有相同源图像的新Image对象。

我希望这些图像引脚是交互式的(onMouseOver / onClick / etc),但是当我尝试执行以下代码时,我没有看到任何事件:

<body>
    <canvas id="backgroundMapCanvas"  width="1177" height="669"></canvas>
</body>

<style type="text/css" media="screen">
    canvas {
        background:url(images/mapBackground2.jpg)
    }
</style>

<script type="text/javascript">
    var canvas = document.getElementById("backgroundMapCanvas");
    var context = canvas.getContext("2d");

    var pinMelbourne = new Image();
    pinMelbourne.src = "images/redPin3.png";
    pinMelbourne.onload = function() {
        context.drawImage(pinMelbourne, 987, 538);
    };

    pinMelbourne.onmouseover = function() {
        alert("test alert box");
    };
</script>

谢谢,

Virat

2 个答案:

答案 0 :(得分:1)

向canvas元素添加一个事件监听器。

sudo apachectl stop

http://jsfiddle.net/GarryPas/86x4cpyh/2/

x和y代表用户点击的位置,您可以根据这个来决定如何回应。

答案 1 :(得分:1)

您必须将事件添加到画布对象,而不是图像。图像在画布上绘制,但实际的图像对象永远不会添加到页面。要检测鼠标是否在画布上的图像上移动,您需要检查边界框。

canvas.addEventListener('movemove', function(e) {
    var x = e.layerX; // x and y coordinated relative to top-left corner of canvas
    var y = e.layerY;
    if (x >= 987 && x < 987 + pinMelbourne.width && y >= 538 && y < 538 + pinMelbourne.height) {
        alert('Mouse over image');
    }
})