Como detectar o clique em um gif ou imagem jpg

2 respostas
L

Olá pessoal, estou tentando fazer uma desafio de um curso, ele propões em fazer um mini game onde um alvo aparece aleatoriamente na tela e você tem que clicar nele antes que desapareça, a parte de ele aparecer aleatoriamente já consegui fazer, meu problema é em detectar o click em cima dela, tentei fazer com o código a seguir mas acontece que ele dispara o alert no começo da execução dele, sem eu clicar em nada.

<canvas id="tela" width="600" height="400">
<meta charset="UTF-8">

<script>
	var tela = document.getElementById("tela");
    var c = tela.getContext("2d");

	var imagem = new Image();
	imagem.src="alvo.png";
	
    var Imagem = function(x,y) {
		c.drawImage(imagem,x,y)
	}
		
	var limpa = function() {
		c.clearRect(0,0,600,400);
	}
		
	var sorteia = function() {
		var x = Math.round(Math.random()*550);
		var y = Math.round(Math.random()*350);
			
		limpa();
		Imagem(x,y);
	}

        var clicou = function() {
		alert("Você acertou");
	}
		
	setInterval(sorteia, 3000);	
	imagem.onclick = clicou();
</script>

2 Respostas

Y

Não sei se entendi exatamente, mas se vc quiser detectar o clique na imagem, da pra usar o onClick event do jquery;

$("#id-da-sua-imagem-na-tela").on('click', function(){
    alert("Você acertou");
});
N

Olá Luis,

acontece que você está criando uma imagem dentro do contexto de um canvas, então ela não está como um elemento DOM e sim, um elemento dentro do seu canvas. São dois contextos diferentes. Em segundo lugar, a sua função clicou é executada, pois você está passando a execução dela ao evento “onclick de imagem” - que nesse caso não é disparada pois não existe nesse contexto. Tanto que para tal, você utilizaria document.getElementByName('img') ou algo do tipo.

Faça a seguinte modificação:

var clicou = function(evento) {
    console.log(evento)
    alert("Você acertou");
}

tela.onclick = clicou

Abra a console do seu navegador e você vai notar que contém informações do evento MouseEvent ou seja, é possível capturar a posição do mouse, ao clicar no canvas. Bom, como é um desafio, vou deixar você sugerir o que fazer agora que sabe onde o mouse está e as coordenadas X e Y que você usa dentro da função sorteia :wink:

Outra sugestão seria mudar a abordagem. Ao invés de usar canvas, poderia usar o HTML mesmo, criando uma imagem, “appendando” ela ao body e modificando a posição do css, via javascipt, daí você estaria no contexto do DOM, podendo fazer do desse jeito que quer.
:+1:

Criado 10 de março de 2016
Ultima resposta 1 de jul. de 2017
Respostas 2
Participantes 3