He escrito una secuencia de comandos para mostrar gráficamente algunos datos orientados a filas, con barras, etiquetas y conexiones entre filas. A medida que el conjunto de datos ha crecido, el elemento SVG resultante ha excedido el tamaño de la pantalla. Para mantener el resultado en una pantalla (en parte, para facilitar el manejo del zoom d3), he escalado el elemento SVG antes de dibujar para que se ajuste a la pantalla. Hice esto agregando un atributo de transformación/escala al elemento SVG.¿Cómo especifico el nivel de zoom inicial en D3?
El problema es que el comportamiento de d3.zoom no sabe acerca de este cambio en la escala, por lo que cuando empiezo a hacer zoom, primero restablece la escala a 1. ¿Hay alguna manera de cambiar la escala inicial en el comportamiento de d3.zoom ?
EDIT: añadió un trabajo en torno
kludged esto multiplicando d3.event.scale por la escala inicial en la función() redibujo. Por lo tanto, la declaración inicial del elemento SVG es
var SVG = d3.select('#timeline')
.append('svg:svg')
.attr('class','chart')
.attr('transform','scale('+bscale+')')
.attr('width', wwidth)
.attr('height', wheight)
.call(d3.behavior.zoom()
.extent([[0,Infinity],[0,Infinity],[0,Infinity]])
.on('zoom', redraw));
y
function redraw() {
SVG.attr("transform",
"translate(" + d3.event.translate + ")"
+ "scale(" + d3.event.scale * bscale + ")");
};
Desafortunadamente, la API d3 [https://github.com/mbostock/d3/wiki/API-Reference] no tiene una página para esto. ¿Hay algún ejemplo en línea que muestre el uso del zoom()? – August
Encontrado esto: https://github.com/mbostock/d3/pull/488 – August
¿qué debería ser 'currentScale'? – vsync