Тема: Як зберегти viewbox ? бібліотека svg.js
var height = () => /Android/i.test(navigator.userAgent) ? window.screen.availHeight : window.innerHeight;
var draw = SVG().addTo("#draw").size("100%", height());
var rect = draw.rect(100, 100).attr({ fill: "#f06" }).move(5, 5); // TODO: фігура
var rect1 = draw.rect(100, 100).attr({ fill: "#080" }).move(30, 30); // TODO: фігура
//! #002 Початкові параметри SVG
var svgElement = document.querySelector("#draw svg"); // Отримати елемент SVG
var svgWidth = svgElement.clientWidth; // Ширина SVG у пікселях
var svgHeight = svgElement.clientHeight; // Висота SVG у пікселях
draw.style("cursor", "default");
//! #003 Початкові параметри viewbox
// draw.viewbox(0, 0, svgWidth, svgHeight);
draw.viewbox(draw.viewbox().x, draw.viewbox().y, svgWidth, svgHeight);
var viewBoxWidth = draw.viewbox().width,
viewBoxHeight = draw.viewbox().height,
viewBoxX = draw.viewbox().x,
viewBoxY = draw.viewbox().y;
//! #004 Переміщення мишкою простору SVG/ViewBox
draw.mousedown(function (event) {
draw.viewbox(draw.viewbox().x, draw.viewbox().y, svgWidth, svgHeight);
if (event.button === 1) {
draw.style("cursor", "grabbing");
var startX = event.clientX;
var startY = event.clientY;
draw.mousemove(function (event) {
var deltaX = event.clientX - startX;
var deltaY = event.clientY - startY;
var newX = draw.viewbox().x - deltaX * (viewBoxWidth / svgWidth);
var newY = draw.viewbox().y - deltaY * (viewBoxHeight / svgHeight);
draw.viewbox(newX, newY, viewBoxWidth, viewBoxHeight);
startX = event.clientX;
startY = event.clientY;
});
draw.mouseup(function () {
draw.style("cursor", "default");
draw.off("mousemove");
draw.off("mouseup");
});
}
});
draw.on("wheel",function (event) {
if (event.shiftKey) {
event.preventDefault();
var delta = event.deltaY > 0 ? 1.1 : 0.9;
var mouseX = event.clientX - svgElement.getBoundingClientRect().left;
var mouseY = event.clientY - svgElement.getBoundingClientRect().top;
var oldViewBox = draw.viewbox();
var newWidth = oldViewBox.width * delta;
var newHeight = oldViewBox.height * delta;
var mouseXRatio = mouseX / svgWidth;
var mouseYRatio = mouseY / svgHeight;
var newViewBoxX = oldViewBox.x - (newWidth - oldViewBox.width) * mouseXRatio;
var newViewBoxY = oldViewBox.y - (newHeight - oldViewBox.height) * mouseYRatio;
viewBoxX = newViewBoxX;
viewBoxY = newViewBoxY;
draw.viewbox(newViewBoxX, newViewBoxY, newWidth, newHeight);
}
});
Така проблема: Використовую бібліотеку svg.js. Спочатку переміщую при натиснутому колесі миші, потім при контрол+колесо миші зближую/віддаляю. Все іде добре. Коли знову переміщую, картинка скаче вбік і масштаб зіскакує до початкового. Підкажіть як зберегти стан viewbox?