Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   SVG масштабирование (https://javascript.ru/forum/misc/42229-svg-masshtabirovanie.html)

Ninja 18.10.2013 00:40

SVG масштабирование
 
Нужно масштабировать SVG-холст, но без изменения размеров лежащих внутри объектов.

Например: на картинке черный квадрат - исходный, розовый - после увеличения размера холста.
Увеличиваю так:
<svg width="1500" height="1500" version="1.1" viewBox="0 0 500 500">

Нужно получить такую позицию чёрного квадрата после масштабирования:

DjDiablo 18.10.2013 14:52

Вот тебе две картинки с разным размером холста но выглядещие совершенно одинаково
Секрет в том что viewBox соответствует размеру холста SVG

<svg width="400px" height="100px" viewBox="0 0 400 100">
  <g id="square">
      <rect x="10" y="10" width="30" height="30" style="fill: none; stroke: black;"/>
  </g>  
</svg>  
</br>

<svg width="200px" height="100px" viewBox="0 0 200 100">
  <g id="square">
      <rect x="10" y="10" width="30" height="30" style="fill: none; stroke: black;"/>
  </g>  
</svg>

Ninja 18.10.2013 15:15

В таком случае и координаты у обеих квадратов будут одинаковы(визуально будут лежать в одном и том же месте). Мне нужно чтобы при изменении масштаба появлялся сдвиг как у розового квадрата, но размер оставался тем же.

DjDiablo 18.10.2013 15:27

Цитата:

Нужно масштабировать SVG-холст, но без изменения размеров лежащих внутри объектов.
Я и сделал без изменения :)

Если ширина менятся недолжна а должны только координаты то пересчитывай скриптом позицию каждого ребенка холста
var коэф=текущаяШиринаХолста/оригинальнаяШиринаХолста;
ТекущийXэлемента=ОригнальныйXэлемента * коэф;

Ninja 18.10.2013 16:12

Спасибо, формула то что надо :)


Часовой пояс GMT +3, время: 02:20.