Wenn Sie zu einem canvas
Element zeichnen, zeichnen Sie einfach eine Bitmap im Sofortmodus .
Die gezeichneten Elemente (Formen, Linien, Bilder) haben außer den verwendeten Pixeln und ihrer Farbe keine Darstellung.
Um ein Klickereignis für ein canvas
Element (eine Form) zu erhalten, müssen Sie daher Klickereignisse für das canvas
HTML-Element erfassen und mithilfe von Mathematik bestimmen, auf welches Element geklickt wurde, vorausgesetzt, Sie speichern die Breite / Höhe und den x / y-Versatz der Elemente .
Verwenden Sie ..., click
um Ihrem canvas
Element ein Ereignis hinzuzufügen ...
canvas.addEventListener('click', function() { }, false);
Um festzustellen, auf welches Element geklickt wurde ...
var elem = document.getElementById('myCanvas'),
elemLeft = elem.offsetLeft + elem.clientLeft,
elemTop = elem.offsetTop + elem.clientTop,
context = elem.getContext('2d'),
elements = [];
// Add event listener for `click` events.
elem.addEventListener('click', function(event) {
var x = event.pageX - elemLeft,
y = event.pageY - elemTop;
// Collision detection between clicked offset and element.
elements.forEach(function(element) {
if (y > element.top && y < element.top + element.height
&& x > element.left && x < element.left + element.width) {
alert('clicked an element');
}
});
}, false);
// Add element.
elements.push({
colour: '#05EFFF',
width: 150,
height: 100,
top: 20,
left: 15
});
// Render elements.
elements.forEach(function(element) {
context.fillStyle = element.colour;
context.fillRect(element.left, element.top, element.width, element.height);
});
jsFiddle .
Dieser Code hängt ein click
Ereignis an das canvas
Element an und überträgt dann eine Form ( element
in meinem Code als "Form" bezeichnet ) an ein elements
Array. Sie können hier so viele hinzufügen, wie Sie möchten.
Der Zweck des Erstellens eines Arrays von Objekten besteht darin, dass wir ihre Eigenschaften später abfragen können. Nachdem alle Elemente auf das Array verschoben wurden, durchlaufen wir jedes Element und rendern es basierend auf seinen Eigenschaften.
Wenn das click
Ereignis ausgelöst wird, durchläuft der Code die Elemente und bestimmt, ob der Klick über einem der Elemente im elements
Array erfolgte. Wenn ja, feuert sie eine alert()
, die leicht modifiziert werden könnte etwas wie entfernen Sie das Array - Element zu tun, in dem Fall , dass Sie eine separate bräuchten machen Funktion , um das Update canvas
.
Der Vollständigkeit halber, warum Ihre Versuche nicht funktioniert haben ...
elem.onClick = alert("hello world"); // displays alert without clicking
Dies weist alert()
der onClick
Eigenschaft von den Rückgabewert von zu elem
. Es ruft sofort das auf alert()
.
elem.onClick = alert('hello world'); // displays alert without clicking
In JavaScript sind die '
und "
semantisch identisch, die der Lexer wahrscheinlich ['"]
für Anführungszeichen verwendet.
elem.onClick = "alert('hello world!')"; // does nothing, even with clicking
Sie weisen der onClick
Eigenschaft von eine Zeichenfolge zu elem
.
elem.onClick = function() { alert('hello world!'); }; // does nothing
JavaScript unterscheidet zwischen Groß- und Kleinschreibung. Die onclick
Eigenschaft ist die archaische Methode zum Anhängen von Ereignishandlern. Es kann nur ein Ereignis an die Eigenschaft angehängt werden, und das Ereignis kann beim Serialisieren des HTML-Codes verloren gehen.
elem.onClick = function() { alert("hello world!"); }; // does nothing
Wieder ' === "
.
onclick
anstelle vononClick