--- title: Рисование текста slug: Web/API/Canvas_API/Tutorial/Drawing_text tags: - Canvas - Графика - Примеры - Руководство - мануал translation_of: Web/API/Canvas_API/Tutorial/Drawing_text original_slug: Web/API/Canvas_API/Tutorial/Рисование_текста ---
После того, как мы увидели в предыдущей главе, как применять стили и цвета, взглянем на написание текста в canvas.
Контекст рендеринга canvas предоставляет два метода для рисования текста:
fillText
Текст вставлен с использованием текущего fillStyle
.
function draw() { var ctx = document.getElementById('canvas').getContext('2d'); ctx.font = "48px serif"; ctx.fillText("Hello world", 10, 50); }
<canvas id="canvas" width="300" height="100"></canvas>
draw();
{{EmbedLiveSample("Пример_fillText", 310, 110)}}
strokeText
Текст вставлен с использованием текущего strokeStyle
.
function draw() { var ctx = document.getElementById('canvas').getContext('2d'); ctx.font = "48px serif"; ctx.strokeText("Hello world", 10, 50); }
<canvas id="canvas" width="300" height="100"></canvas>
draw();
{{EmbedLiveSample("Пример_strokeText", 310, 110)}}
В примерах выше мы уже использовали свойство font для изменения размера текста. Кроме него существуют ещё несколько свойств, позволяющие настроить вывод текста на canvas:
start
, end
, left
, right
или center
. По умолчанию - start
.top
, hanging
, middle
, alphabetic
, ideographic
, bottom
. По умолчанию - alphabetic
.ltr
, rtl
, inherit
. По умолчанию - inherit
.Эти свойства могут быть вам знакомы если вы работали с CSS.
Изображение от WHATWG ниже показывает различные варианты свойства textBaseline
.
Редактируя код ниже, вы можете видеть, как меняется отображение текста на canvas в реальном времени:
ctx.font = "48px serif"; ctx.textBaseline = "hanging"; ctx.strokeText("Hello world!", 0, 100);
<canvas id="canvas" width="400" height="200" class="playable-canvas"></canvas> <div class="playable-buttons"> <input id="edit" type="button" value="Edit" /> <input id="reset" type="button" value="Reset" /> </div> <textarea id="code" class="playable-code"> ctx.font = "48px serif"; ctx.textBaseline = "hanging"; ctx.strokeText("Hello world", 0, 100);</textarea>
var canvas = document.getElementById("canvas"); var ctx = canvas.getContext("2d"); var textarea = document.getElementById("code"); var reset = document.getElementById("reset"); var edit = document.getElementById("edit"); var code = textarea.value; function drawCanvas() { ctx.clearRect(0, 0, canvas.width, canvas.height); eval(textarea.value); } reset.addEventListener("click", function() { textarea.value = code; drawCanvas(); }); edit.addEventListener("click", function() { textarea.focus(); }) textarea.addEventListener("input", drawCanvas); window.addEventListener("load", drawCanvas);
{{ EmbedLiveSample('Playable_code', 700, 360) }}
Для измерения ширины текста (без рисования его на canvas) можно воспользоваться следующим методом:
Пример ниже показывает, как можно измерить ширину текста.
function draw() { var ctx = document.getElementById('canvas').getContext('2d'); var text = ctx.measureText("foo"); // TextMetrics object text.width; // 16; }
В ранних версиях Gecko (движок рендеринга в Firefox, Firefox OS и других приложениях Mozilla) были реализованы методы API с префиксами для рисования текста на canvas. На данный момент они устарели и уже, возможно, удалены, поэтому их правильная работа не гарантируется.
{{PreviousNext("Web/API/Canvas_API/Tutorial/Applying_styles_and_colors", "Web/API/Canvas_API/Tutorial/Using_images")}}