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

Ниже приводится HTML-страница, которая может служить простым примером использования прикладного интерфейса Canvas. Сценарий в ней рисует красный квадрат и голубой круг в элементе

<b>&lt;canvas&gt;,</b>
как показано на рис. 21.2:

<b>&lt;body&gt;</b>

<b>Это красный квадрат: &lt;canvas id=&quot;square&quot; width=100 height=100&gt;&lt;/canvas&gt;.</b>

<b>Это голубой круг: &lt;canvas id=&quot;circle&quot; width=100 height=100&gt;&lt;/canvas&gt;.</b>

<b>&lt;script&gt;</b>

<b>var canvas = document.getElementById(&quot;square&quot;); // Найти первый элемент canvas</b>

<b>var context = canvas.getContext(&quot;2d&quot;);          // Получить 2-мерный контекст</b>

<b>context.fillStyle = &quot;#f00&quot;;                     // Цвет заливки - красный</b>

<b>context.fillRect(0,0,100,100);                    // Залить квадрат</b>

<b>canvas = document.getElementById(&quot;circle&quot;);     // Второй элемент canvas</b>

<b>context = canvas.getContext(&quot;2d&quot;);              // Получить его контекст</b>

<b>context.beginPath();                            // Начать новый &quot;контур&quot;</b>

<b>context.arc(50, 50, 50, 0, 2*Math.PI, true);       // Добавить круг</b>

<b>context.fillStyle = &quot;#00f&quot;;                     // Цвет заливки - синий</b>

<b>context.fill();                                 // Залить круг</b>

<b>&lt;/script&gt;</b>

<b>&lt;/body&gt;</b>

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

<b>Canvas</b>
тоже используется понятие контура. Однако контур в данном случае описывается не как строка из символов и чисел, а как последовательность вызовов методов, таких как
<b>beginPath()</b>
и
<b>агс(),</b>
использованных в примере выше. После того как контур будет определен, к нему можно применять различные операции, выполняемые такими методами, как
<b>fill()</b>
. Особенности выполнения операций определяются различными свойствами объекта контекста, такими как
<b>fillStyle</b>
. В следующих подразделах рассказывается:

• Как определять фигуры, как рисовать контуры фигур и как выполнять заливку внутренней области фигур.

• Как устанавливать и читать значение графических атрибутов объекта контекста элемента

<b>&lt;canvas&gt;</b>
и как сохранять и восстанавливать текущие значения этих атрибутов.

• О размерах холста, системе координат по умолчанию элемента

<b>&lt;canvas&gt;</b>
и о том, как выполнять трансформации этой системы координат.

• О различных методах рисования кривых объекта

<b>Canvas</b>
.

• О некоторых специализированных вспомогательных методах рисования прямоугольников.

• Как определять цвета, как работать с прозрачностью и как рисовать градиенты и выполнять заливку шаблонными изображениями.

• Об атрибутах, определяющих толщину линий и внешний вид концов линий и вершин многоугольников.

• Как рисовать текст в элементе

<b>&lt;canvas&gt;.</b>

• Как ограничивать область холста, чтобы рисование не выполнялось за пределами указанной области.

• Как добавлять тени к фигурам.

• Как рисовать (и при необходимости масштабировать) изображения в элементе

<b>&lt;canvas&gt;</b>
и как извлекать содержимое этого элемента в виде графического изображения.

• Как управлять созданием составных изображений, когда вновь добавляемые (просвечивающие) пикселы объединяются с существующими пикселами.

• Как получать и записывать красную, зеленую, синюю составляющие цвета и степень прозрачности пикселов в элементе <canvas>.

• Как определить, возникло ли событие мыши, когда ее указатель находился над нарисованным изображением в элементе <canvas>.

В конце этого раздела будет представлен практический пример, в котором элементы <canvas> будут использоваться для отображения небольших внутристрочных диаграмм (sparklines).

Во многих примерах работы с элементом

<b>&lt;canvas&gt;,</b>
которые следуют ниже, используется переменная с. Эта переменная хранит объект
<b>CanvasRenderingContext2D</b>
элемента
<b>&lt;canvas&gt;,</b>
но инициализация этой переменной в самих примерах обычно не показана. Если у вас появится желание опробовать эти примеры, добавьте разметку HTML, определяющую элемент
<b>&lt;canvas&gt;</b>
с соответствующими атрибутами
<b>width</b>
и
<b>height</b>
, и следующий программный код, инициализирующий переменную с:

<b>var canvas = document.getElementById(&quot;my_canvas_id&quot;); </b>

<b>var c = canvas.getContext('2d');</b>

Рисунки, которые встретятся вам далее, были созданы сценариями JavaScript, использующими элемент

<b>&lt;canvas&gt;</b>
- обычно с очень большими размерами, чтобы создать изображения с высоким разрешением, пригодные для печати.

21.4.1. Рисование линий и заливка многоугольников

Чтобы нарисовать прямые линии в элементе

<b>&lt;canvas&gt;</b>
и залить внутреннюю область замкнутой фигуры, образуемой этими линиями, необходимо сначала определить контур (path). Контур - это последовательность из одного или более фрагментов контура. Фрагмент контура - это последовательность из двух или более точек, соединенных прямыми линиями (или, как будет показано ниже, кривыми). Создается новый контур с помощью метода
<b>beginPath()</b>
. А фрагмент контура -с помощью метода
<b>moveTo().</b>
После установки начальной точки фрагмента контура вызовом метода
<b>moveTo()</b>
можно соединить эту точку с новой точкой прямой линией, вызвав метод
<b>liпеТо()</b>
. Следующий фрагмент определяет контур, состоящий из двух прямых линий: