Voglio rendere un testo in una visualizzazione d3 trascinabile per l'uso in un editor. Ho iniziato a giocare con e degli esempi (http://bl.ocks.org/mbostock/4063550). Quando aggiungo un dragbeheavier all'elemento text, posso dire da ChromeDevTools che qualcosa viene trascinato ma non c'è una rappresentazione visiva di quel trascinamento. Ho anche provato a farlo usando l'interfaccia utente di JQuery che non ha funzionato. Cosa mi manca ed è anche possibile farlo?Creazione di un testo SVG trascinabile con d3.js
risposta
È possibile utilizzare drag.behaviour per aggiungere eventi di trascinamento agli elementi.
1) Create una funzione per gestire l'evento di trascinamento (di tipo d3.event):
function dragmove(d) {
d3.select(this)
.style("top", ((d3.event.sourceEvent.pageY) - this.offsetHeight/2)+"px")
.style("left", ((d3.event.sourceEvent.pageX) - this.offsetWidth/2)+"px")
}
2) Creare comportamento trascinate utilizzando la funzione di cui sopra come gestore:
var drag = d3.behavior.drag()
.on("drag", dragmove);
3) Bind it ad un elemento o un insieme di elementi utilizzando .call
su una selezione d3:
d3.select("body").append("div")
.attr("id", "draggable")
.text("Drag me bro!")
.call(drag)
Provalo: http://jsfiddle.net/HvkgN/2/
Ecco lo stesso esempio, adapted for an svg text element:
function dragmove(d) {
d3.select(this)
.attr("y", d3.event.y)
.attr("x", d3.event.x)
}
var drag = d3.behavior.drag()
.on("drag", dragmove);
d3.select("body").append("svg")
.attr("height", 300)
.attr("width", 300)
.append("text")
.attr("x", 150)
.attr("y", 150)
.attr("id", "draggable")
.text("Drag me bro!")
.call(drag)
Un modo più bello per aggiungere trascinare ad un elemento SVG è quello di utilizzare un tradurre trasformare ciò che si muove l'elemento trascinabile intorno. Accoppialo con un gestore di eventi di trascinamento che utilizza d3.event.dx e d3.event.dy per monitorare il movimento del mouse.
var transX = 0;
var transY = 0;
var theElement = d3.select('svg#xyz text.blahblah').attr('transform', "translate(" + transX + ", " + transY + ")");
var repositionElement = function(data) {
transX += d3.event.dx;
transY += d3.event.dy;
theElement.attr('transform', "translate(" + transX + ", " + transY + ")");
};
var addDragging = function (element) {
element.call(d3.behavior.drag().on('drag', repositionElement));
};
addDragging(theElement);
Inoltre, a differenza cambiando x/y direttamente, questa tecnica può essere usato per fare un intero gruppo <g>
trascinabili, in modo che quando l'utente clicca e trascina qualsiasi parte del gruppo, il tutto si muove gruppo!
- 1. SVG su tela con d3.js
- 2. Aggiunta di più testo svg con d3
- 3. Adatta testo in SVG Element (Usando D3/JS)
- 4. SVG trascinabile utilizzando JQuery e Jquery-svg
- 5. rotanti percorsi di testo in diagramma accordo d3.js senza consueto svg: testo
- 6. Creazione di un albero pieghevole D3.js dai dati CSV
- 7. problemi con l'introduzione a d3.js
- 8. Modifica numero visualizzato come testo svg gradualmente, con transizione D3
- 9. D3.js: Capire lo zoom in termini di svg
- 10. d3.js Aggiungi un cerchio nel d3.geo.path
- 11. d3.js salva stati
- 12. Creazione di un'asse x dell'etichetta con una scala ordinale in D3.js
- 13. È possibile importare forme svg in d3.js?
- 14. d3.js: Transizione dei colori in una sfumatura lineare SVG?
- 15. ridimensionamento proiezioni d3.js
- 16. tick di assi del testo svg multilinea in d3
- 17. Firefox in difficoltà sulla libreria svg d3.js?
- 18. Uso d3.js con Apache Zeppelin
- 19. Oscillazione: creazione di un componente trascinabile ...?
- 20. d3.js che gestisce i browser non svg
- 21. Bounding box in D3.js
- 22. Data ordinamento con d3.js
- 23. Visualizzazione D3.js con node.js
- 24. d3.js Comportamento anomalo rotazione
- 25. Come trascinare un gruppo svg usando il comportamento di trascinamento di d3.js?
- 26. d3.js. Globo rotante con barre
- 27. Grafici polari con D3.js
- 28. D3 map Prestazioni SVG
- 29. Elementi SVG ridimensionabili con JavaScript e D3
- 30. Come disegnare un segmento * simple * con d3.js?
Mi spiace che non è quello che intendevo .. Ho elementi di testo SVG che ho bisogno di trascinare e non rispondono a .call (trascinamento) – chenninger
@chenninger Non è questo che sta facendo l'esempio qui? – Phrogz
@chenninger Ho aggiornato l'esempio per un elemento di testo svg! Dispiace per la confusione. – minikomi