Soy un experimentado programador de Java, pero estoy viendo cosas de JavaScript/HTML5 por primera vez en aproximadamente una década. Estoy completamente perplejo sobre lo que debería ser la cosa más simple de la historia.¿Cómo agrego un controlador de eventos onClick simple a un elemento canvas?
Como ejemplo, solo quería dibujar algo y agregarle un manejador de eventos. Estoy seguro de que estoy haciendo algo estúpido, pero lo he buscado todo y nada de lo que se sugiere (por ejemplo, la respuesta a esta pregunta: Add onclick property to input with JavaScript) funciona. Estoy usando Firefox 10.0.1. Mi código sigue. Verá varias líneas comentadas y al final de cada una de ellas encontrará una descripción de qué (o qué no) sucede.
¿Cuál es la sintaxis correcta aquí? ¡Me estoy volviendo loco!
<html>
<body>
<canvas id="myCanvas" width="300" height="150"/>
<script language="JavaScript">
var elem = document.getElementById('myCanvas');
// elem.onClick = alert("hello world"); - displays alert without clicking
// elem.onClick = alert('hello world'); - displays alert without clicking
// elem.onClick = "alert('hello world!')"; - does nothing, even with clicking
// elem.onClick = function() { alert('hello world!'); }; - does nothing
// elem.onClick = function() { alert("hello world!"); }; - does nothing
var context = elem.getContext('2d');
context.fillStyle = '#05EFFF';
context.fillRect(0, 0, 150, 100);
</script>
</body>
Use 'onclick' en lugar de' onClick' – noob
Para explicar por qué esos intentos no funcionaron ... Los primeros dos comentarios muestran una alerta inmediatamente porque está llamando 'alert()' directamente en '
Como alternativa a la respuesta de Alex:
Se puede usar un dibujo SVG en lugar de un lienzo de dibujo. Allí puede agregar eventos directamente a los objetos DOM trazados.
ver por ejemplo:
Making an svg image object clickable with onclick, avoiding absolute positioning
Fuente
2015-10-14 12:35:01 Goswin
También se puede poner elementos DOM, como
div
en la parte superior de la tela que representaría sus elementos canvas y estar colocada de la misma manera.Ahora puede adjuntar detectores de eventos a estos divs y ejecutar las acciones necesarias.
Fuente
2016-03-31 16:22:06
Alex Answer es bastante limpio, pero cuando se utiliza el contexto de rotación puede ser difícil rastrear las coordenadas x, y, así que he hecho un Demo que muestra cómo hacer un seguimiento de eso.
Básicamente estoy usando esta función & dándole el ángulo & la cantidad de distancia recorrida en ese ángel antes de dibujar el objeto.
Fuente
2017-01-24 15:55:10
Recomiendo el siguiente artículo: Hit Region Detection For HTML5 Canvas And How To Listen To Click Events On Canvas Shapes que pasa por varias situaciones.
Sin embargo, no cubre la API
addHitRegion
, que debe ser la mejor manera (el uso de funciones matemáticas y/o comparaciones es bastante propenso a errores). Este enfoque se detalla on developer.mozillaFuente
2018-02-23 10:22:36 RUser4512