Чтение онлайн

на главную - закладки

Жанры

JavaScript. Подробное руководство, 6-е издание
Шрифт:

icon.setAttribute("stroke", "black"); // Такая же рамка,

icon.setAttribute("stroke-width", "2");

chart.appendChild(icon); // Добавить в диаграмму

// Добавить метку правее квадрата

var label = document.createElementNS(svgns, "text");

label.setAttribute("x", lx + 30); // Координаты текста

label.setAttribute("y", ly + ЗО*і + 18);

// Стиль текста можно также определить посредством таблицы CSS-стилей

label.setAttribute("font-family", "sans-serif");

label.setAttribute("font-size", "16");

// Добавить текстовый DOM-узел в элемент <svg:text>

label.appendChild(document.createTextNode(labels[і]));

chart.appendChild(label); // Добавить текст в диаграмму

}

return chart;

}

Программный код в примере 21.2 относительно прост. Здесь выполняются некоторые математические расчеты для преобразования исходных данных в углы секторов круговой диаграммы. Однако основную часть примера составляет программный код, создающий SVG-элементы и выполняющий настройку их атрибутов. Чтобы этот пример мог работать в броузерах, не полностью поддерживающих стандарт HTML5, здесь формат SVG интерпретируется как грамматика XML и вместо метода

createElement
используются пространство имен SVG и метод
createElementNS
.

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

<svg:path>
. Этот SVG-элемент описывает рисование произвольных фигур, состоящих из линий и кривых. Описание фигуры определяется атрибутом
d
элемента
<svg:path>.
Основу описания составляет компактная грамматика символьных кодов и чисел, определяющих координаты, углы и прочие значения. Например, символ
М
означает «move to» (переместиться в точку), и вслед за ним должны следовать координаты X и У точки. Символ
L
означает «line to» (рисовать линию до точки); он рисует линию от текущей точки до точки с координатами, которые следуют далее. Кроме того, в этом примере используется символьный код
А
, который рисует дугу (arc). Вслед за этим символом следуют семь чисел, описывающих дугу. Точное описание нас здесь не интересует, но вы можете найти его в спецификации по адресу http://www.w3.org/TR/SVG/.

Обратите внимание, что функция

pieChart
возвращает элемент
<svg>,
содержащий описание круговой диаграммы, но она не вставляет этот элемент в документ. Предполагается, что это будет делать вызывающая программа. Диаграмма, изображенная на рис. 21.3, была создана с помощью следующего файла:

<html>

<head>

<script src="PieChart.js"x/scr.ipt>

</head>

<body onload="document.body.appendChild(

pieChart([12, 23, 34, 45], 640, 400, 200, 200, 150,

['красный','синий’,'желтый','зеленый'],

['Север','Юг', 'Восток', 'Запад'], 400, 100));

">

</body>

</html>

В примере 21.3 демонстрируется создание еще одного SVG-изображения: в нем формат SVG используется для отображения аналоговых часов (рис. 21.4). Однако вместо создания дерева SVG-элементов с самого начала, в нем используется статическое SVG-изображение циферблата, встроенное в HTML-страницу. Это статическое изображение включает два SVG-элемента

<line>,
представляющих часовую и минутную стрелки. Обе линии направлены вверх, в результате чего статическое изображение часов показывает время 12:00. Чтобы превратить это изображение в действующие часы, в примере используется сценарий на языке JavaScript, устанавливающий атрибут
transform
каждого элемента
<liпе>
и поворачивающий их на углы, соответствующие текущему времени.

Обратите внимание, что в примере 21.3 разметка SVG встроена непосредственно в файл HTML5 и в ней не используются пространства имен XML, как в XHTML-файле выше. Это означает, что данный пример будет работать только в броузерах, поддерживающих возможность непосредственного встраивания разметки SVG. Однако если преобразовать HTML-файл в XHTML, тот же самый прием будет работать и в старых броузерах с поддержкой SVG.

Пример 21.3. Отображение времени посредством манипулирования SVG-изображением

<! D0CTYPE НТМ1_>

<html>

<head>

<title>Analog Clock</title>

<script>

function updateTime { // Обновляет SVG-изображение часов

// в соответствии с текущим временем

var now = new Date; // Текущее время

var min = now.getMinutes; // Минуты

var hour = (now.getHours % 12) + min/60; // Часы с дробной частью

var minangle = min*6; // 6 градусов на минуту

var hourangle = hour*30; // 30 градусов на час

// Получить SVG-элементы стрелок часов

Поделиться:
Популярные книги

Мужчина моей судьбы

Ардова Алиса
2. Мужчина не моей мечты
Любовные романы:
любовно-фантастические романы
8.03
рейтинг книги
Мужчина моей судьбы

Курс 1. Сентябрь

Фокс Гарри
1. Маркатис
Фантастика:
аниме
фэнтези
сказочная фантастика
5.00
рейтинг книги
Курс 1. Сентябрь

Афганский рубеж 2

Дорин Михаил
2. Рубеж
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Афганский рубеж 2

Ботаник 2

Щепетнов Евгений Владимирович
2. Ботаник
Фантастика:
фэнтези
боевая фантастика
6.00
рейтинг книги
Ботаник 2

Эммануэль

Арсан Эммануэль
1. Эммануэль
Любовные романы:
эро литература
7.38
рейтинг книги
Эммануэль

Матабар. II

Клеванский Кирилл Сергеевич
2. Матабар
Фантастика:
фэнтези
5.00
рейтинг книги
Матабар. II

Путь к бессмертию 1

Покинтелица Евгений
1. Девятихвостый Богатырь
Фантастика:
попаданцы
сказочная фантастика
фэнтези
5.00
рейтинг книги
Путь к бессмертию 1

Наследие Маозари 5

Панежин Евгений
5. Наследие Маозари
Фантастика:
фэнтези
юмористическое фэнтези
5.00
рейтинг книги
Наследие Маозари 5

Диверсант

Вайс Александр
2. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
Диверсант

Журнал «Если», 2002 № 08

Андерсон Кевин Джей
114. Журнал Если
Фантастика:
научная фантастика
5.00
рейтинг книги
Журнал «Если», 2002 № 08

Газлайтер. Том 8

Володин Григорий
8. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 8

Убивать чтобы жить 7

Бор Жорж
7. УЧЖ
Фантастика:
героическая фантастика
космическая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 7

На границе империй. Том 10. Часть 3

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 3

Анти-Ксенонская Инициатива

Вайс Александр
7. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
космоопера
5.00
рейтинг книги
Анти-Ксенонская Инициатива