--- 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")}}