
Как измерить ширину текста в JavaScript

Как измерить ширину текста в JavaScript
Часто в веб-разработке возникает необходимость точно узнать, сколько пикселей займет строка текста при заданном шрифте. Например, сделать красивую обрезку длинных заголовков с многоточием, выравнивание графических элементов в canvas или валидация ввода в реальном времени. Самый лучший способ для этого - использовать метод measureText() объект Canvas. Он возвращает размер с точной шириной текста в пикселях, а главное, без необходимости добавления элементов в DOM и без влияния на верстку.
Метод measureText() возвращает объект TextMetrics, который в современных браузерах содержит не только width, но и дополнительные метрики. Также в функции используется хитрый трюк со свойством функции (getTextWidth.canvas), чтобы при каждом вызове не создавать новый элемент <canvas>. Это ускоряет работу в 5-10 раз при массовых измерениях.
Code (JavaScript) : Убрать нумерацию
- // Функция измеряет ширину текста с учетом стиля шрифта
- function get_text_width(text, font) {
- // Создаем canvas один раз и переиспользуем его
- const canvas = getTextWidth.canvas ||
- (getTextWidth.canvas = document.createElement('canvas'));
- const ctx = canvas.getContext('2d');
- // Применяем стиль шрифта
- ctx.font = font;
- // Получаем результат ширины
- return ctx.measureText(text).width;
- }
Code (JavaScript) : Убрать нумерацию
- // С жирным начертанием и размером
- get_text_width("Заголовок", "bold 24px Verdana");
- // Курсив и кастомный шрифт
- get_text_width("Курсивный текст", "italic 18px 'Times New Roman'");
Code (JavaScript) : Убрать нумерацию
- function truncate_text(text, font, max_width) {
- if (get_text_width(text, font) <= max_width) {
- return text;
- }
- // Начальный текст
- let truncated = text;
- // Обрезаем по одному символу
- while (get_text_width(truncated + '...', font) > maxWidth
- && truncated.length > 0) {
- // Обрезаем последний символ
- truncated = truncated.slice(0, -1);
- }
- // Обработанный текст
- return truncated + '...';
- }
- // Использование
- const result = truncate_text('Очень длинный заголовок, который '+
- 'нужно обрезать', '14px Arial', 200);
- // Результат: 'Очень длинный заголов...'
Просмотров: 108 | Комментариев: 0
Метки: JavaScript, полезные функции
Комментарии
Отзывы посетителей сайта о статье
Комментариeв нет
Добавить комментарий
Заполните форму для добавления комментария

