如何为画布中随机定位的框添加单击事件?

时间:2016-02-24 03:05:39

标签: javascript html5 canvas

所以我试图创建一个在canvas元素中随机生成方框的游戏。当用户点击该框时,该框应该消失,并且应该出现一个新框。还应该有一个计时器显示自该框出现以来已经有多长时间(四舍五入到最接近的十分之一秒)。每次出现一个新框时,时间应重置为0。我还想保留一个分数,分数取决于用户点击框的时间,更短的时间导致更高的分数。每次用户点击框时,都应更新分数。

我只想让10个盒子一次一个地随机出现,然后在点击最后一个盒子后停止。

现在,我被困在如何捕获随机生成的框的点击事件。我在网上和StackOverflow上进行了研究,但所有答案都非常复杂,我无法找到将这些逻辑应用到我想要完成的工作中的方法。

所以我现在的问题是如何捕获随机定位框的点击事件,如果有人点击它,我怎么能让它消失呢?

这是我目前的代码: http://codepen.io/developertenzin/full/ZQgxmZ/

HTML:

<canvas id="myCanvas" width=500 height=500>

</canvas>

CSS:

#myCanvas {
    margin: auto;
    display: block;
    border: 1px solid black;
}

JAVASCRIPT:

var canvas = document.getElementById("myCanvas");
var c = canvas.getContext("2d");

c.fillStyle = "black";
function makeBox() {
    setTimeout(function() {
        var top = Math.random();
        top = top * 500;
        var left = Math.random();
        left = left * 500;
        c.fillRect(top, left, 50, 50);
        createdTime = Date.now();
    }, 1000);
}

makeBox();

我提前感谢你的帮助。

1 个答案:

答案 0 :(得分:2)

这样的事情应该有效。

canvas.addEventListener('click',function(event)
{
    //remove the extra coords added on by the position of canvas
    var x=event.clientX-event.target.OffsetLeft;
    var y=event.clientY-event.target.OffsetTop;
    inBox(x,y);
});
function inBox(x,y)
{
   if ((y>top)&&(y<top+50)&&(x>left)&&(x<left+50))
   {
       //inside the bounds
   }
}