Прямой код:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>jsконтрольSVGУвеличить</title>
</head>
<body>
<svg id="svg" style="background-color: #FAFAFA;">
<g id="svgPanel">
<g id="grid"></g>
<defs>
<path id="path1" d="M300,200 a1,1 0 0,0 100,0" />
</defs>
<text x="10" y="100" style="fill:green;">
<textPath xlink:href="#path1">Ла ла ла ла ла ла ла ла ла ла ла ла ла ла ла ла ла ла ла ла ла ла ла ла ла ла ла ла ла ла ла ла ла ла ла ла ла ла.</textPath>
</text>
</g>
</svg>
<button onclick="zoom(1.1)">увеличить</button>
<button onclick="zoom(0.9)">уменьшить масштаб</button>
<script type="text/javascript">
var svg = document.getElementById('svg');
var svgPanel = document.getElementById('svgPanel');
var gridSvg = document.getElementById('grid');
var width = 800; // Установите общую ширину и высоту SVG
var height = 400;
var gridLength = 20; // Определите размер сетки
svg.setAttribute('width', width);
svg.setAttribute('height', height);
// рисовать сетку
drawGrid(gridSvg, width, height, gridLength);
/*
* нарисовать сеть
* @param {Object} svgBackground рисовать сеткуобъект
* @param {Int} winWidth ширина области
* @param {Int} winHeight высота области
* @param {Int} gridLength размер сетки
*/
function drawGrid(svgBackground, winWidth, winHeight, gridLength) {
var childs = gridSvg.childNodes;
// Удалите предыдущие узлы сетки, чтобы облегчить рисование.
for (var i = childs.length - 1; i>= 0; i--){
svgBackground.removeChild(childs.item(i));
}
for (var j = 0,len = Math.ceil(winWidth / gridLength); j < len; j++){
var attrs = {
x1 : j * gridLength,
y1 : 0,
x2 : j * gridLength,
y2 : winHeight,
stroke : '#add'
};
var line = resetSvg('line', attrs);
svgBackground.appendChild(line);
}
for (var k = 0, len2 = Math.ceil(winHeight / gridLength); k <= len2; k++){
var attrs2 = {
x1 : 0,
y1 : k * gridLength,
x2 : winWidth,
y2 : k * gridLength,
stroke : '#add'
};
var line2 = resetSvg('line', attrs2);
svgBackground.appendChild(line2)
}
}
/*
* js создает элемент SVG
* @param {String} tag Название ярлыка SVG
* @param {Object} Атрибуты элементов SVG
*/
function resetSvg(tag, attrs) {
var element = document.createElementNS('http://www.w3.org/2000/svg', tag);
for (var g in attrs){
element.setAttribute(g, attrs[g])
}
return element;
}
/*
* SVG-зум
* {Float} num кратная усадка
*/
var scale = 1;
function zoom(num) {
scale *= num;
svgPanel.setAttribute('transform', 'scale(' + scale + ')');
drawGrid(gridSvg, width*(1/scale), height*(1/scale), gridLength);
}
// Привязать колесо мыши
if (document.addEventListener){
document.addEventListener('DOMMouseScroll', scrollZoom, false);
}
window.onmousewheel = document.onmousewhell = scrollZoom;
/*
* Событие обработки прокрутки шкива. Прокрутите вверх, чтобы увеличить масштаб.
* {Object} e объект события
*/
function scrollZoom(e) {
e = e || window.event;
// e.detail используется для совместимости с FireFox.
e.wheelDelta>0 || e.detail>0?zoom(1.1):zoom(0.9);
}
</script>
</body>
</html>