Wenn Sie mit JQuery vertraut sind, sollte D3 ein freundliches Gefühl haben, da es eine ähnliche API teilt. Speziell in Bezug auf .on(action, fn)
Syntax für das Anhängen eines Ereignis-Listeners an eine DOM-Auswahl.
Wenn Sie die jsFiddle Ich habe erstellt, die implementiert eine sehr grundlegende Implementierung von was Sie danach sind, können Sie dies in Bewegung in 21 Zeilen von JS sehen.
(function() {
var svg = d3.select('svg');
function getRandom(min, max) {
return Math.floor(Math.random() * (max - min) + min);
}
function drawCircle(x, y, size) {
console.log('Drawing circle at', x, y, size);
svg.append("circle")
.attr('class', 'click-circle')
.attr("cx", x)
.attr("cy", y)
.attr("r", size);
}
svg.on('click', function() {
var coords = d3.mouse(this);
console.log(coords);
drawCircle(coords[0], coords[1], getRandom(5,50));
});
})();
Die wichtigsten Aspekte dieser Schnipsel sind auf den Linien 18-20 (.on(...)
und d3.mouse(this)
). Das Ereignis on('click',..)
ist an das Element svg angehängt. Wenn ein Klick auftritt, wird d3.mouse
mit dem aktuellen Bereich als sein Argument aufgerufen. Es gibt dann ein Array mit x- und y-Koordinaten des Mausereignisses zurück. Diese Informationen werden dann zusammen mit einem zufälligen Radius an drawCircle
übergeben, um einen Kreis auf der aktuellen SVG-Arbeitsfläche zu zeichnen.
Ich empfehle Ihnen, die jsFiddle und haben ein Spiel nehmen!
Sie sollten wahrscheinlich an die Aktion des Hinzufügens eines Kreises als Datenmanipulation anstelle einer Zeichenoperation denken. Nach einem Klick möchten Sie also ein Element an das Array anhängen, das Sie für die Datenbindung verwenden, und dann das gesamte Diagramm wie zuvor neu zeichnen. – meetamit
Lesen Sie diese: http://bost.ocks.org/mike/circles/ –