У меня есть макет силы с поведением масштабирования.
var min_zoom = 0.3;
var max_zoom = 3;
var zoom = d3.behavior.zoom().scaleExtent([min_zoom,max_zoom]);
Перед отправкой формы масштабирование (с помощью колесика мыши) и перевод работают нормально, как и ожидалось.
svg.attr("transform", "translate(" + d3.event.translate + ")" + " scale(" + d3.event.scale + ")" );
С этой целью жизнь хороша.
Когда форма отправлена, текущие значения translate
и scale
сохраняются в сеансе.В качестве примера, скажем, что текущий scale
равен 2
.После отправки формы и повторной загрузки страницы сохраненный scale
применяется, восстанавливая масштаб до его состояния перед отправкой.
Однако после этой загрузки страницы значение d3.event.scale
снова устанавливается в исходное значение (я думаю, это 1
).Следовательно, попытка снова выполнить увеличение или уменьшение масштаба (используя колесо мыши) применяет масштабный коэффициент к начальному базовому значению увеличения (предположительно 1
для d3.event.scale
) вместо использования значений, сохраненных из сеанса 2
, и сделает внезапное, неожиданное изменение масштаба.
PS.Попытка вручную присвоить значение d3.event.scale
не работает!Я думаю, что самым простым обходным решением будет изменение d3.event.scale
в случае, если это возможно.В противном случае ручное управление масштабированием кажется исчерпывающим и не интуитивно понятным вариантом.