Spec-Zone.ru › Web APIs

DataTransfer: метод setData()

Базовая поддержка Широко распространена

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с июля 2015 года.

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

Метод DataTransfer.setData() устанавливает переносимые данные операции перетаскивания на указанные данные и тип. Если данные для заданного типа отсутствуют, они добавляются в конец хранилища данных перетаскивания, так что последний элемент в списке types будет новым типом. Если данные для заданного типа уже существуют, существующие данные заменяются на том же месте. То есть порядок списка types не изменяется при замене данных того же типа.

Примеры типов данных: text/plain и text/uri-list.

Синтаксис

setData(format, data)

Параметры

format

Строка, представляющая тип переносимых данных для добавления в DataTransfer.

data

Строка, представляющая данные для добавления в DataTransfer.

Возвращаемое значение

None (undefined).

Примеры

Перетаскивание элемента

В этом примере мы можем перетащить элемент <p> в целевой элемент <div>.

  • В обработчике dragstart мы используем setData() для добавления id элемента <p> в объект DataTransfer.

  • В обработчике drop мы получаем id и используем его для перемещения элемента <p> в целевой элемент.

HTML

<div>
  <p id="source" draggable="true">
    Select this element, drag it to the drop zone and then release the selection
    to move the element.
  </p>
</div>
<div id="target">Drop Zone</div>

<button id="reset">Reset example</button>

CSS

div {
  margin: 0.5em 0;
  padding: 2em;
}

#target,
#source {
  border: 1px solid black;
  padding: 0.5rem;
}

.dragging {
  background-color: pink;
}

JavaScript

const source = document.querySelector("#source");
source.addEventListener("dragstart", (ev) => {
  console.log("dragStart");
  // Change the source element's background color
  // to show that drag has started
  ev.currentTarget.classList.add("dragging");
  // Clear the drag data cache (for all formats/types)
  ev.dataTransfer.clearData();
  // Set the drag's format and data.
  // Use the event target's id for the data
  ev.dataTransfer.setData("text/plain", ev.target.id);
});
source.addEventListener("dragend", (ev) =>
  ev.target.classList.remove("dragging"),
);

const target = document.querySelector("#target");
target.addEventListener("dragover", (ev) => {
  console.log("dragOver");
  ev.preventDefault();
});
target.addEventListener("drop", (ev) => {
  console.log("Drop");
  ev.preventDefault();
  // Get the data, which is the id of the source element
  const data = ev.dataTransfer.getData("text");
  const source = document.getElementById(data);
  ev.target.appendChild(source);
});

const reset = document.querySelector("#reset");
reset.addEventListener("click", () => document.location.reload());

Результат

Спецификации

Спецификация
HTML
# dom-datatransfer-setdata-dev

Совместимость с браузерами

Рабочие столы Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari на iOS Samsung Internet WebView Android
setData 3 12 3.5 12 5 18 4 12 5 1.0 ≤37

См. также

  • Перетаскивание и размещение
  • Операции перетаскивания
  • Рекомендуемые типы перетаскивания
  • Тест DataTransfer - Вставка или перетаскивание

© 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/DataTransfer/setData

Spec-Zone.ru

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