Событие CharacterBoundsUpdateEvent
Ограниченная доступность
Эта функция не относится к Baseline, так как она не работает в некоторых из самых широко используемых браузеров.
Экспериментально: Это экспериментальная технология
Перед использованием в рабочей среде внимательно проверьте таблицу совместимости с браузерами.
Интерфейс CharacterBoundsUpdateEvent — это событие DOM, представляющее запрос от операционной системы о границах определённых символов в редактируемой области, прикреплённой к экземпляру EditContext.
Этот интерфейс наследует свойства от Event.
Конструктор
-
CharacterBoundsUpdateEvent()Экспериментально -
Создаёт новый объект
CharacterBoundsUpdateEvent.
Свойства экземпляра
-
CharacterBoundsUpdateEvent.rangeStartТолько для чтения Экспериментально -
Смещение первого символа в тексте редактируемой области, для которого операционная система нуждается в границах.
-
CharacterBoundsUpdateEvent.rangeEndТолько для чтения Экспериментально -
Смещение последнего символа в тексте редактируемой области, для которого операционная система нуждается в границах.
Примеры
Обновление границ символов при необходимости
Этот пример демонстрирует, как использовать событие characterboundsupdate и метод updateCharacterBounds для информирования операционной системы о необходимых границах символов. Обратите внимание, что обратный вызов обработчика событий вызывается только при использовании окна IME или других платформ-специфических интерфейсов редактирования для ввода текста.
<canvas id="editor-canvas"></canvas>
const FONT_SIZE = 40;
const FONT = `${FONT_SIZE}px Arial`;
const canvas = document.getElementById("editor-canvas");
const ctx = canvas.getContext("2d");
ctx.font = FONT;
const editContext = new EditContext();
canvas.editContext = editContext;
function computeCharacterBound(offset) {
// Measure the width from the start of the text to the character.
const widthBeforeChar = ctx.measureText(
editContext.text.substring(0, offset),
).width;
// Measure the character width.
const charWidth = ctx.measureText(editContext.text[offset]).width;
const charX = canvas.offsetLeft + widthBeforeChar;
const charY = canvas.offsetTop;
// Return a DOMRect representing the character bounds.
return DOMRect.fromRect({
x: charX,
y: charY - FONT_SIZE,
width: charWidth,
height: FONT_SIZE,
});
}
editContext.addEventListener("characterboundsupdate", (e) => {
const charBounds = [];
for (let offset = e.rangeStart; offset < e.rangeEnd; offset++) {
charBounds.push(computeCharacterBound(offset));
}
// Update the character bounds in the EditContext instance.
editContext.updateCharacterBounds(e.rangeStart, charBounds);
console.log(
"The required character bounds are",
charBounds
.map((bound) => {
return `(x: ${bound.x}, y: ${bound.y}, width: ${bound.width}, height: ${bound.height})`;
})
.join(", "),
);
});
Спецификации
| Спецификация |
|---|
| API EditContext # dom-characterboundsupdateevent |
Совместимость с браузерами
| Рабочий стол | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
CharacterBoundsUpdateEvent |
121 | 121 | Нет | 107 | Нет | 121 | Нет | 81 | Нет | 25.0 | 121 |
CharacterBoundsUpdateEvent |
121 | 121 | Нет | 107 | Нет | 121 | Нет | 81 | Нет | 25.0 | 121 |
rangeEnd |
121 | 121 | Нет | 107 | Нет | 121 | Нет | 81 | Нет | 25.0 | 121 |
rangeStart |
121 | 121 | Нет | 107 | Нет | 121 | Нет | 81 | Нет | 25.0 | 121 |
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/CharacterBoundsUpdateEvent