svg-pan-zoom Панорамирование и масштабирование до одного и того же места в разных размерах браузера

Я использую библиотеку ariutta svg-pan-zoom(https://github.com/ariutta/svg-pan-zoom). (Также используется с панелями jquery.layout.js и jquery-ui.js)

Я хотел бы сохранить такие значения, как значения панорамирования и масштабирования svg-pan-zoom svg, и использовать эти значения для перехода в одно и то же место с помощью браузера с окном другого размера.

В настоящее время я использую getPan() и getZoom() для сохранения значений; затем масштабируйте (масштабируйте) и панорамируйте (панорамируйте) в другом браузере, чтобы масштабировать и панорамировать в том же месте. Это не работает, когда размер окна браузера отличается.

Я нашел эту статью, но она не относится к окну другого размера:
Панорамирование по определенным координатам X и Y и центрирование изображения svg-pan-zoom


person art guy    schedule 10.11.2015    source источник


Ответы (1)


Панорамирование и масштабирование относятся к текущему размеру контейнера. Итак, вам нужно вычислить центральную точку видимой части SVG. Затем в новом окне вычислите, какой должна быть новая панорама, чтобы иметь точку SVG (которая была центром в предыдущем случае). Что касается зума, это зависит от того, как вы хотите, чтобы он работал, но вы можете использовать настоящий зум.

Чтобы получить размеры контейнера и реальный масштаб, используйте instance.getSizes().

Так, например, для вычисления оси x выполните:

var s = instance.getSizes()
var p = instance.getPan()
var relativeX = s.width / 2 / (p.x + s.viewBox.width * s.realZoom)

// After resize
var s = instance.getSizes()
var p = instance.getPan()
var x = (s.width / 2 / relativeX) - s.viewBox.width * s.realZoom
instance.pan({x: x, y: 0})

Сделайте то же самое для оси Y

person bumbu    schedule 12.11.2015
comment
Когда я открываю новый браузер с переменными pan x и y, где я могу подключить их к этому коду? Я вижу только относительные переменные x и y. Вот мой код: - person art guy; 01.12.2015
comment
Извините, но если вы не можете справиться с этим кодом, вам нужно заплатить/убедить кого-то сделать вашу работу. - person bumbu; 02.12.2015
comment
Есть проблемы; panZoom({x: x, y: 0}) не является функцией. После изменения размера var p = panZoom.getPan() не используется в вашем коде. Это должно было быть? - person art guy; 02.12.2015
comment
Я обновил код. panZoom в моем случае был экземпляр svgPanZoom. Последняя строка была неправильной (но нетрудно догадаться, какой она должна быть на самом деле). - person bumbu; 03.12.2015
comment
Есть ли причина, по которой вы запускаете эту строку после изменения размера: var p = instance.getPan() - person art guy; 04.12.2015
comment
Просто введите все значения в консоль и посмотрите, что произойдет. - person bumbu; 05.12.2015
comment
Конечно, я заплачу вам или кому-то, кто сможет заставить это работать с моей кодовой панелью: codepen.io /AlmaTheYounger/pen/QNLxPG?editors=0011 - person art guy; 02.03.2016