Причина перемещения <li/>
(перестановка шахматной доски) заключается в том, что в вашей drop
функция вызывает appendChild
:
function drop(event) {
var element = event.dataTransfer.getData("Text");
// This changes the DOM
event.target.appendChild(document.getElementById(element));
event.stopPropagation();
return false;
}
Вместо перемещения этого фактического узла DOM,функция drop
должна копировать innerHTML
перетаскиваемого узла.Вот как будет выглядеть новая функция drop
:
function drop(event) {
var coordinate = event.dataTransfer.getData("Text");
var element = document.getElementById(coordinate);
event.target.innerHTML = element.innerHTML; // Moving piece to new cell
element.innerHTML = ""; // Clearing old cell
event.stopPropagation(); // Consider using `event.preventDefault` instead
return false;
}
Кроме того, я бы рассмотрел использование event.preventDfault
вместо event.stopPropagation
.Это позволяет добавлять новых слушателей отбрасывания на доску или одного из ее родителей.Например, вы можете захотеть добавить слушатель отбрасывания в тело документа, чтобы обработать случай, когда пользователь пытается перетащить кусок с доски.
Как общее замечание, вы рассматривали возможность использования jQueryUI перетаскиваемые и сбрасываемые библиотеки?Вы сможете поддерживать гораздо более богатые взаимодействия перетаскивания, такие как перемещение по сетке и отложенные запуски.Кроме того, перетаскивание HTML5 обычно используется, чтобы позволить пользователям перетаскивать файлы со своего рабочего стола ОС на веб-страницу.То, как вы используете его, совершенно нормально, просто немного странно.