Spec-Zone.ru › Web APIs

Событие CharacterBoundsUpdateEvent

Ограниченная доступность

Эта функция не относится к Baseline, так как она не работает в некоторых из самых широко используемых браузеров.

  • Подробнее
  • Полная совместимость
  • Отправить отзыв

Экспериментально: Это экспериментальная технология
Перед использованием в рабочей среде внимательно проверьте таблицу совместимости с браузерами.

Интерфейс CharacterBoundsUpdateEvent — это событие DOM, представляющее запрос от операционной системы о границах определённых символов в редактируемой области, прикреплённой к экземпляру EditContext.

Этот интерфейс наследует свойства от Event.

Событие CharacterBoundsUpdateEvent

Конструктор

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API