Spec-Zone.ru › SVG

Скрипты

Можно переопределить поведение браузера по умолчанию с помощью метода evt.preventDefault(), добавлять обработчики событий объектам с помощью синтаксиса element.addEventListener(event, function, useCapture) и задавать свойства элементов с помощью такого синтаксиса, как svgElement.style.setProperty("fill-opacity", "0.0", ""). Обратите внимание, что для задания свойств предусмотрены все три аргумента.

Предотвращение поведения по умолчанию в коде обработчика событий

При написании кода для перетаскивания иногда можно заметить, что во время перетаскивания случайно выделяется текст на странице. Или, если вы хотите использовать в коде клавишу Backspace, может потребоваться переопределить поведение браузера по умолчанию при её нажатии — переход на предыдущую страницу. Это позволяет сделать метод evt.preventDefault().

Использование eventListeners с объектами

Методы addEventListener() и removeEventListener() очень полезны при создании интерактивного SVG. В качестве второго параметра этих методов можно передать объект, реализующий интерфейс handleEvent.

function myRect(x, y, w, h, message) {
  this.message = message;

  this.rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
  this.rect.setAttributeNS(null, "x", x);
  this.rect.setAttributeNS(null, "y", y);
  this.rect.setAttributeNS(null, "width", w);
  this.rect.setAttributeNS(null, "height", h);
  document.documentElement.appendChild(this.rect);

  this.rect.addEventListener("click", this, false);

  this.handleEvent = (evt) => {
    switch (evt.type) {
      case "click":
        alert(this.message);
        break;
    }
  };
}

Междокументное взаимодействие: ссылка на встроенный SVG

При использовании SVG в HTML Adobe SVG Viewer 3.0 автоматически добавляет свойство окна с именем svgDocument, которое указывает на документ SVG. В нативной реализации SVG в Mozilla это свойство отсутствует, поэтому window.svgDocument в Mozilla не работает. Вместо этого можно использовать

const svgDoc = document.embeds["name_of_svg"].getSVGDocument();

чтобы получить ссылку на встроенный документ SVG.

Лучший способ получить доступ к Document, представляющему документ SVG, — обратиться к HTMLIFrameElement.contentDocument (если документ отображается в элементе <iframe>) или к HTMLObjectElement.contentDocument (если документ отображается в элементе <object>), например:

const svgDoc = document.getElementById("iframe_element").contentDocument;

Кроме того, элементы <iframe>, <embed> и <object> предоставляют метод getSVGDocument(), который возвращает XMLDocument, представляющий встроенный в элемент документ SVG, или null, если элемент не представляет документ SVG.

Также можно использовать document.getElementById("svg_elem_name").getSVGDocument(), который возвращает тот же результат.

Примечание: В документации может упоминаться интерфейс SVGDocument. До SVG 2 документы SVG представлялись с помощью этого интерфейса. Однако теперь для представления документов SVG используется интерфейс XMLDocument.

Междокументное взаимодействие: вызов функций JavaScript

При вызове из встроенного в HTML-документ файла SVG функции JavaScript, находящейся в HTML-файле, следует использовать parent.functionName() для обращения к этой функции. Хотя плагин Adobe SVG Viewer позволяет использовать functionName(), это не рекомендуемый способ.

Примечание: Согласно вики SVG, переменная JS "parent" работает некорректно в предварительной версии плагина Adobe SVG версии 6. В качестве обходного решения предлагается использовать "top" вместо "parent". Поскольку это бета-версия плагина, вероятно, на это можно не обращать внимания.

Дополнительную информацию и примеры можно найти на странице вики SVG о междокументном взаимодействии.

У метода setProperty три параметра

Функция svgElement.style.setProperty("fill-opacity", "0.0") вызывает исключение DOMException — SYNTAX ERR в Mozilla. Это поведение определено W3C в спецификации DOM Level 2 Style. Функция setProperty определена как функция с тремя параметрами. Приведённый выше код можно заменить на 'svgElement.style.setProperty("fill-opacity", "0.0", "")', что соответствует стандартам.

Ссылки

Вики SVG о скриптах и программировании

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/SVG/Guides/Scripting

Spec-Zone.ru

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