Se si ha familiarità con JQuery, D3 dovrebbe avere un aspetto amichevole, poiché condivide un'API simile. In particolare per quanto riguarda la sintassi .on(action, fn)
per collegare un listener di eventi a una selezione DOM.
Se si verifica il jsFiddle che ho creato che implementa un'implementazione molto di base di quello che stai cercando, allora puoi vederlo in movimento in 21 righe di JS.
(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));
});
})();
Gli aspetti più importanti di questo frammento sono sulle linee 18-20 (.on(...)
e d3.mouse(this)
). L'evento on('click',..)
è collegato all'elemento svg. Quando si verifica un clic, d3.mouse
viene chiamato con l'ambito corrente come argomento. Quindi restituisce una matrice con le coordinate xey dell'evento del mouse. Questa informazione viene quindi passata a drawCircle
, insieme a un raggio casuale per disegnare un cerchio sulla tela SVG corrente.
Ti consiglio di prendere il jsFiddle e giocare!
Probabilmente dovresti pensare all'azione di aggiungere un cerchio come manipolazione dei dati, piuttosto che un'operazione di disegno. Quindi, dopo un clic, si desidera aggiungere un elemento all'array che si utilizza per l'associazione dei dati e quindi ridisegnare l'intero grafico come prima. – meetamit
Leggi questo: http://bost.ocks.org/mike/circles/ –