Я написал script, чтобы графически отображать некоторые ориентированные на строку данные, с барами, метками и соединениями между строками. По мере роста набора данных полученный элемент SVG превысил размер экрана. Чтобы сохранить результат на одном экране (отчасти для упрощения управления размером d3 для пользователя), я масштабировал элемент SVG перед рисованием так, чтобы он соответствовал экрану. Я сделал это, добавив атрибут transform/scale в элемент SVG.
Проблема в том, что d3 behavior.zoom не знает об этом изменении масштаба, поэтому, когда я начинаю увеличивать масштаб, он сначала сбрасывает масштаб на 1. Есть ли способ изменить начальный масштаб в d3 behavior.zoom?
EDIT: добавлен рабочий процесс
Убито это путем умножения d3.event.scale на начальный масштаб в функции redraw(). Итак, начальная декларация элемента SVG
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));
и
function redraw() {
SVG.attr("transform",
"translate(" + d3.event.translate + ")"
+ "scale(" + d3.event.scale * bscale + ")");
};