Ho esaminato questo blocco d3.js Timeline with Zoom. Tuttavia, non sono in grado di capire come viene effettivamente implementata la funzione di zoom. Qualcuno potrebbe aiutarmi a capire?D3.js: Capire lo zoom in termini di svg
risposta
Non sono sicuro, ma penso che questo sia solo un trucco con le bilance D3.
Quello che succede è che ottiene la selezione seguente (che è una proiezione al 100% di con dal tempo 0 al tempo 100) e traccia in una nuova scala dal tempo 50 al tempo 80 con la stessa larghezza.
In questo modo la scala cambierà in un modo che sembra ingrandito in quel momento nel tempo.
Francamente, non si verifica alcuno zoom.
var brush = d3.svg.brush()
.x(x)
.on("brush", display);//this calls display function on brush event drag.
Funzione di visualizzazione interna.
minExtent = brush.extent()[0],//this give the brush extent min
maxExtent = brush.extent()[1],//this give the brush extent max
In base alla max e min del pennello filtrare i dati:
visItems = items.filter(function(d) {return d.start < maxExtent && d.end > minExtent;});
Ripristinare il dominio con max e min del pennello.
x1.domain([minExtent, maxExtent]);
Selezionare tutti i rettangoli nell'area superiore che non hanno i dati associati al pennello nel DOM. aggiornarlo con la nuova scala valori
rects = itemRects.selectAll("rect")
.data(visItems, function(d) { return d.id; })
.attr("x", function(d) {return x1(d.start);})
.attr("width", function(d) {return x1(d.end) - x1(d.start);});
creare nuovi rettangoli se il dato è presente, ma non è presente DOM.
rects.enter().append("rect")
.attr("class", function(d) {return "miniItem" + d.lane;})
.attr("x", function(d) {return x1(d.start);})
.attr("y", function(d) {return y1(d.lane) + 10;})
.attr("width", function(d) {return x1(d.end) - x1(d.start);})
.attr("height", function(d) {return .8 * y1(1);});
Rimuovi tutti rettangolo outsside nella misura pennello o no nell'elenco degli elementi filtrati visItems
rects.exit().remove();
esattamente lo stesso per etichette come fatto per i rettangoli sopra.
Spero che questo chiarisca tutti i tuoi dubbi.
- 1. d3.js zoom/trascina diagramma di dispersione
- 2. D3.js Imposta il livello di zoom iniziale
- 3. Grafico zoom in D3
- 4. SVG su tela con d3.js
- 5. d3.js diagramma a dispersione - zoom/trascinamento confini, pulsanti zoom, reimpostazione zoom, calcolo mediana
- 6. Lo zoom d3.js funziona solo con il cursore sui pixel del grafico
- 7. d3.js forza layout auto zoom/scala dopo il caricamento
- 8. Bounding box in D3.js
- 9. D3 map Prestazioni SVG
- 10. Ripristino delle proprietà di zoom d3
- 11. Firefox in difficoltà sulla libreria svg d3.js?
- 12. È possibile importare forme svg in d3.js?
- 13. d3.js salva stati
- 14. d3.js: Transizione dei colori in una sfumatura lineare SVG?
- 15. Adatta testo in SVG Element (Usando D3/JS)
- 16. Limitazione del dominio durante lo zoom o il panning in D3.js
- 17. Creazione di un testo SVG trascinabile con d3.js
- 18. d3.js che gestisce i browser non svg
- 19. ridimensionamento proiezioni d3.js
- 20. Come specificare il livello di zoom iniziale in D3?
- 21. d3.js Aggiungi un cerchio nel d3.geo.path
- 22. geochart in d3.js
- 23. d3.js Comportamento anomalo rotazione
- 24. D3.js: che cos'è 'g' in .append ("g") codice D3.js?
- 25. D3.js, necessario evento click in d3.js
- 26. d3.js Ottieni legenda fuori dal grafico
- 27. SVG zoom sul mouse - modello matematico
- 28. colore trasparente in javascript D3.js
- 29. Grafici a strati in d3.js
- 30. d3.js GeoJSON e limiti