Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная работа №12 / Лабораторная работа 12

.pdf
Скачиваний:
9
Добавлен:
19.01.2023
Размер:
378.3 Кб
Скачать

Лабораторная работа № 12

Разработка векторных элементов для Web.

Цель: ознакомить студентов с методикой создания элементов Web-дизайна в

Inkscape.

Теоретические сведения

Анимация

Элементы веб-дизайна выглядят более интересным, привлекающими внимание, если их анимировать. Существует огромное множество различных программ как платных, так и бесплатных, которые разработаны специально для создания анимированных свг-изображений.

В Inkscape так же, как и в любом векторном редакторе осуществляется создание свг-анимации, при этом принцип создания анимации в разных векторных редакторах практически одинаковый. В отличие от растровых редакторов, анимация векторных объектов – это не покадровая и не гиф-анимация (послойная), это интерактивная анимация, основанная на написании скриптового кода.

Inkscape – это векторный редактор, который сохраняет свои файлы SVG в формате XML. XML-файлы можно редактировать, используя различные текстовые редакторы: Блокнот, WordPad и т.д. Таким образом, создание анимации в Inkscape сводится к созданию графической композиции в виде файла формата SVG, затем редактирование этого файла в текстовом редакторе и добавление кода для анимации выделенного векторного объекта.

SVG-спрайты.

Спрайт, в рамках веб-разработки – это файл с графическими объектами, полученный в результате объединения нескольких графических файлов.

На web-страницах кроме CSS-спрайтов, созданных в растровом редакторе, могут быть использованы и SVG-спрайты, но в отличие от растровых спрайтов, собственных инструментов для создания SVG-спрайта в Inkscape нет.

Однако, можно создать макет будущего спрайта как единое изображение в векторном редакторе и сохранить в формате svg, а затем вставить спрайт в разметку html-файла.

Способ описан в статье Osvaldas Valutis1 и состоит в следующем: «при срабатывании javascript происходит проверка: спрайт уже записан в localStorage? Если да, он берется оттуда и вставляется на страницу. Если нет, файл скачивается, записывается в localStorage и потом вставляется на страницу.»

1 Статья “Caching SVG Sprite in localStorage" http://osvaldas.info/caching-svg-sprite-in-localstorage

1

Листинг кода SVG-спрайта:

(function(window, document) {

'use strict';

var file = 'img/sprite.svg', // путь к файлу спрайта на сервере

revision = 1; // версия спрайта

if (!document.createElementNS || !document.createElementNS('http://www.w3.org/2000/svg', 'svg').createSVGRect) return true;

var isLocalStorage = 'localStorage' in window && window\['localStorage'\] !== null,

request,

data,

insertIT = function() { document.body.insertAdjacentHTML('afterbegin', data);

},

insert = function() {

if (document.body) insertIT();

else document.addEventListener('DOMContentLoaded', insertIT); };

if (isLocalStorage && localStorage.getItem('inlineSVGrev') == revision) { data = localStorage.getItem('inlineSVGdata');

if (data) { insert(); return true;

}

}

try {

request = new XMLHttpRequest(); request.open('GET', file, true); request.onload = function() {

if (request.status >= 200 && request.status < 400) {

2

data = request.responseText;

insert();

if (isLocalStorage) {

localStorage.setItem('inlineSVGdata', data);

localStorage.setItem('inlineSVGrev', revision);

}

}

}

request.send(); } catch (e) {}

}(window, document));

Примеры.

Пример 1. Создайте анимацию круга.

1.Создайте новый документ. Нарисуйте цветной круг со следующими параметрами: размер – произвольный, цвет заливки – бирюзовый, цвет контура – черный.

2.Сохраните полученное изображение в inkscape в виде файла в формате SVG.

3.Откройте созданный файл SVG в текстовом редакторе, где отобразится

следующий код:

<?xml version=1.0 encoding=UTF-8 standalone=no?>

<!-- Created with Inkscape (http://www.inkscape.org/) -->

<svg

xmlns:dc=http://purl.org/dc/elements/1.1/

xmlns:cc=http://creativecommons.org/ns#

3

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:sodipodi=http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd xmlns:inkscape=http://www.inkscape.org/namespaces/inkscape width=210mm

height=297mm

viewBox=0 0 744.09448819 1052.3622047 id=svg2

version=1.1 inkscape:version=0.91 r13725

sodipodi:docname=drawing-1.svg> <defs

id=defs4 /> <sodipodi:namedview

id=base

pagecolor=#ffffff

bordercolor=#666666

borderopacity=1.0

inkscape:pageopacity=0.0

inkscape:pageshadow=2

inkscape:zoom=0.35 inkscape:cx=-139.28571 inkscape:cy=520 inkscape:document-units=px inkscape:current-layer=layer1 showgrid=false inkscape:window-width=1600 inkscape:window-height=837 inkscape:window-x=-8 inkscape:window-y=-8

4

inkscape:window-maximized=1 /> <metadata

id=metadata7>

<rdf:RDF>

<cc:Work

rdf:about=>

<dc:format>image/svg+xml</dc:format>

<dc:type rdf:resource=http://purl.org/dc/dcmitype/StillImage />

<dc:title></dc:title>

</cc:Work>

</rdf:RDF>

</metadata>

<g inkscape:label=Layer 1

inkscape:groupmode=layer

id=layer1>

<circle style=opacity:1;fill:#00ffff;fill-opacity:1;stroke:#000000;stroke-width:15;stroke-

linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke- opacity:1

id=path4136 cx=-321.42856 cy=468.07648 r=110 />

</g>

</svg>

4.Упростите файл, удалив все необязательные параметры для анимации, а также изменив ширину и высоту рисунка, задав новые значения ширины и высоты изображения: width=1500 height=1500. Начальное положение нарисованного круга: cx=200 cy=200. Идентификатор круга (ID) изменим со значения по умолчанию на id=BlueCircle.

5

<?xml version=1.0 encoding=UTF-8 standalone=no?> <svg

xmlns:dc=http://purl.org/dc/elements/1.1/

xmlns=http://www.w3.org/2000/svg

width=1500

height=1500

version=1.1>

<g inkscape:label=Layer 1

inkscape:groupmode=layer

id=layer1>

<circle style=opacity:1;fill:#00ffff;fill-opacity:1;stroke:#000000;stroke-width:15;stroke-

linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke- opacity:1

id=BlueCircle

cx=200

cy=200 r=110 />

</g>

</svg>

5.Добавим в файл, скрипт, который будет задавать движение между тегами <svg> и <g>, а также вызов этого скрипта внутри тега <svg> –

onload=Start(evt).

<?xml version=1.0 encoding=UTF-8 standalone=no?>

<svg

xmlns:dc=http://purl.org/dc/elements/1.1/

xmlns=http://www.w3.org/2000/svg

onload=Start(evt)

width=1500

height=1500

version=1.1>

6

<script type=text/ecmascript> <![CDATA[

var time = 0;

var delta_time = 25; var max_time = 1000; var dir = 1;

var the_rect; function Start(evt) {

the_rect = evt.target.ownerDocument.getElementById(BlueCircle); Oscillate();

}

function Oscillate() {

time = time + dir * delta_time; if (time > max_time) dir = -1; if (time < -max_time) dir = 1; // Calculate x position

x_pos = (time * 25) / max_time; the_rect.setAttribute(transform, translate( +x_pos+ , 0.0 )); // Repeat

setTimeout(Oscillate(), delta_time)

}

window.Oscillate = Oscillate ]]>

</script>

<g inkscape:label=Layer 1

inkscape:groupmode=layer

id=layer1>

<circle

7

style=opacity:1;fill:#00ffff;fill-opacity:1;stroke:#000000;stroke-width:15;stroke- linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke- opacity:1

id=BlueCircle

cx=200

cy=200 r=110 />

</g>

</svg>

Итоговый html-файл будет выглядеть следующим образом:

<?xml version=1.0 encoding=UTF-8 standalone=no?> <svg

xmlns:dc=http://purl.org/dc/elements/1.1/

xmlns=http://www.w3.org/2000/svg

onload=Start(evt)

width=1500

height=1500

version=1.1>

<script type=text/ecmascript> <![CDATA[

var time = 0;

var delta_time = 25; var max_time = 1000; var dir = 1;

var the_rect; function Start(evt) {

the_rect = evt.target.ownerDocument.getElementById(BlueCircle); Oscillate();

}

function Oscillate() {

time = time + dir * delta_time;

8

if (time > max_time) dir = -1;

if (time < -max_time) dir = 1;

// Calculate x position

x_pos = (time * 25) / max_time;

the_rect.setAttribute(transform, translate( +x_pos+ , 0.0 ));

// Repeat

setTimeout(Oscillate(), delta_time)

}

window.Oscillate = Oscillate

]]>

</script>

<g

inkscape:label=Layer 1

inkscape:groupmode=layer

id=layer1>

<circle

style=opacity:1;fill:#00ffff;fill-opacity:1;stroke:#000000;stroke-width:15;stroke-

linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-

opacity:1

id=BlueCircle

cx=200

cy=200

r=110 />

</g>

</svg>

На сайте всегда присутствуют элементы веб-дизайна, которые могут быть как статичными, так и анимированными, поэтому используя возможности скриптов, можно анимировать любой объект, сохраненный в виде SVG-файла:

кнопки;

иконки;

пиктограммы;

баннеры.

9

Пример 2. Создайте следующий svg-спрайт:

1.Создайте новый документ.

2.Выберите инструмент Рисовать прямоугольники и квадраты, создайте прямоугольник оранжевого цвета с красной обводкой и толщиной обводки 2 мм.

3.Добавьте текстовую надпись белого цвета. Используя инструмент Выделить и трансформировать объекты, увеличьте ее размер так, чтобы надпись занимала 2/3 площади прямоугольника.

4.Выделите прямоугольник, используя инструмент Выделить и трансформировать объекты, затем, удерживая клавишу Shift, выделите текстовую надпись.

5.Продублируйте прямоугольник с надписью, используя команду Правка →Дублировать 2 раза. В итоге должно получиться 3 одинаковых прямоугольников с текстовой надписью.

6.На второй и третьей копии измените содержание текстовых надписей, используя инструмент Создать и править текстовые объекты.

7.Выделите все объекты: и прямоугольники, и текстовые надписи с помощью инструмента Выделить и трансформировать объекты.

8.Продублируйте прямоугольники с надписями, используя команду Правка

→Дублировать.

9.Вторую копию разместите под первой, используя инструмент Выделить и трансформировать объекты. Измените цвет прямоугольников с оранжевого на фиолетовый, используя команду.

10.Измените цвет текстовых надписей на копии прямоугольников с белого на синий.

11.Выделите прямоугольник, используя инструмент Выделить и трансформировать объекты, затем, удерживая клавишу Shift, выделите текстовую надпись.

12.Используя команду Объект →Сгруппировать, сгруппируйте прямоугольник с текстовой надписью.

13.Повторите пункты 11 и 12 для оставшихся не сгруппированных объектов.

14.Сохраните полученный файл в формате html.

10

Соседние файлы в папке Лабораторная работа №12