Предпосылки
О преимуществах векторной графики против растровой говорить излишне. Разумеется, не всегда представляется возможным использовать только векторную графику, но во многих применениях именно масштабируемая графика обеспечивает наилучший результат.
В настоящий момент, большинством современных программ-браузеров поддерживается векторная графика (svg), и не пользоваться этим, когда это возможно, пожалуй, не разумно.
Увеличение векторного изображения в программе-браузере можно осуществить изменением масштаба всей страницы (Ctrl+; Ctr-; Ctr+0). Но в этом случае в размере будут изменяться и прочие элементы на странице.
Есть более изящный вариант – создания своего рода лотка под svg-объект и отслеживание событий от манипулятора “мышь” на этом “лотке”. Для этого и существует мини-библиотека SVGPan.
Загрузка библиотеки
Библиотека “SVGPan” распространяется в лучших традициях “Open Source” с лицензией “New BSD License” (https://opensource.org/licenses/BSD-3-Clause). Сама библиотека доступна здесь: https://code.google.com/archive/p/svgpan/.
Подготовка svg-файла
Можно, конечно, подготовить файл и в текстовом редакторе, т.к. SVG – это XML-файл. Но проще, конечно же, воспользоваться графическим редактором, например Inkscape (http://inkscape.org/).
Запустить редактор, создать файл, наполнить его требуемым содержимым, сохранить файл и закрыть редактор.
Note | Если по замыслу необходимо, чтобы перетаскивалась и масштабировалась только часть объектов в svg-файле, то эти объекты нужно разместить в отдельном слое |
Далее, открыв файл уже в текстовом редакторе, очень внимательно и вдумчиво внести следующие изменения:
- в корневом элементе, т.е. в <svg>:
- добавить пространство имён: xmlns:xlink=”http://www.w3.org/1999/xlink”;
- добавить перехватчиков событий “мыши”: onmouseup=”handleMouseUp(evt)” onmousedown=”handleMouseDown(evt)” onmousemove=”handleMouseMove(evt)”;
- удалить, если есть, параметр “viewBox”;
- после служебной информации, сразу перед описанием графического содержимого, добавить ссылку на библиотеку “SVGPan”: <script xlink:href=”SVGPan.js” id=”myScript” />;
- заменить идентификатор слоя, который должен изменяться/перемещаться, на “viewport”.
Пример параметров корневого элемента:
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" <1> xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="200" height="200" onmouseup="handleMouseUp(evt)" <2> onmousedown="handleMouseDown(evt)" <2> onmousemove="handleMouseMove(evt)" <2> id="svg2" version="1.1" inkscape:version="0.91 r13725" sodipodi:docname="testSvgPan.svg"> |
- Добавление пространства имён
- Добавление перехватчиков событий “мыши”
Добавление ссылки на библиотеку:
... </metadata> <script xlink:href="SVGPan.js" id="myScript" /> <g inkscape:label="Layer 1" ... |
Warning | Файл библиотеки “SVGPan” при таком добавлении должен находиться там же, где и svg-файл |
Изменение идентификатора слоя:
<g inkscape:groupmode="layer" id="viewport" <1> inkscape:label="Layer 2" style="display:inline"> |
- Параметр “id” должен иметь значение “viewport”
Внедрение svg-объекта
Самым простым способом добавления рисунка на html-страницу является использование тэга “img”, но в таком случае, сценарий JavaScript работать не будет, поэтому векторный рисунок должен быть встроен/внедрён в html:
<!doctype html> <html lang="ru"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=1024" /> <title>Проверка масштабирования</title> </head> <body> <div> <object id="testSVG" data="testSvgPan.svg"></object> </div> </body> </html> |