JavaScript. Подробное руководство, 6-е издание, стр. 354
<b> "></b><b></body></b><b></html></b>В примере 21.3 демонстрируется создание еще одного SVG-изображения: в нем формат SVG используется для отображения аналоговых часов (рис. 21.4). Однако вместо создания дерева SVG-элементов с самого начала, в нем используется статическое SVG-изображение циферблата, встроенное в HTML-страницу. Это статическое изображение включает два SVG-элемента
<b><line>,</b><b>transform</b><b><liпе></b>
Обратите внимание, что в примере 21.3 разметка SVG встроена непосредственно в файл HTML5 и в ней не используются пространства имен XML, как в XHTML-файле выше. Это означает, что данный пример будет работать только в броузерах, поддерживающих возможность непосредственного встраивания разметки SVG. Однако если преобразовать HTML-файл в XHTML, тот же самый прием будет работать и в старых броузерах с поддержкой SVG.
Пример 21.3. Отображение времени посредством манипулирования SVG-изображением
<b><! D0CTYPE НТМ1_></b><b><html></b><b><head></b><b> <title>Analog Clock</title></b><b> <script></b><b> function updateTime() { // Обновляет SVG-изображение часов</b><b> // в соответствии с текущим временем</b><b> var now = new Date(); // Текущее время</b><b> var min = now.getMinutes(); // Минуты</b><b> var hour = (now.getHours() % 12) + min/60; // Часы с дробной частью</b><b> var minangle = min*6; // 6 градусов на минуту</b><b> var hourangle = hour*30; // 30 градусов на час</b><b> // Получить SVG-элементы стрелок часов</b><b> var minhand = document.getElementById("minutehand");</b><b> var hourhand = document.getElementByldC'hourhand”);</b><b> // Установить в них SVG-атрибут для перемещения по циферблату</b><b> minhand.setAttribute("transform", "rotate(" + minangle + ",50,50)"); </b><b> hourhand.setAttribute("transform", "rotate(" + hourangle + ”,50,50)");</b><b> // Обновлять показания часов 1 раз в минуту setTimeout(updateTime, 60000);</b><b> }</b><b> </script></b><b> <style></b><b> /* Все следующие CSS-стили применяются к SVG-элементам, объявленным ниже */</b><b> #clock { /* общие стили для всех элементов часов */</b><b> stroke: black; /* черные линии */</b><b> stroke-linecap: round; /* с закругленными концами */</b><b> fill: #ееf; /* на светлом, голубовато-сером фоне */</b><b> }</b><b> #numbers { /* стиль отображения цифр на циферблате */</b><b> font-family: sans-serif;</b><b> font-size: 7pt;</b><b> font-weight: bold;</b><b> text-anchor: middle;</b><b> stroke: none; fill: black;</b><b> }</b><b> </style></b><b></head></b><b><body onload="updateTime()"></b><b> <!-- viewBox - система координат, width и height - экранные размеры --></b><b> <svg id="clock" viewBox="0 0 100 100” width="500" height="500"></b><b> <defs> <!-- Определить фильтр для рисования теней --></b><b> <filter id="shadow" x="-50%" y="-50%" width="200%" height="200%"></b><b> <feGaussianBlur in="SourceAlpha" stdDeviation="1" result="blur" /></b><b> <fe0ffset in="blur" dx="1" dy="1" result="shadow" /></b><b> <feMerge></b><b> <feMergeNode in="SourceGraphic"/xfeMergeNode in="shadow"/></b><b> </feMerge></b><b> </filter></b>