Итак, я читаю эту книгу под названием «Поваренная книга разработчиков веб-игр», и я наткнулся на действительно сложный фрагмент кода. Это просто программа для перетаскивания изображений в «инвентарь игрока», чтобы сохранить его в сумке основного игрового персонажа. Вот код-Проблема с кодом JavaScript
var draggingObject;
function handleDragStart(e) {
draggingObject = this;
e.dataTransfer.setData('text/html', this.innerHTML);
var dragIcon = document.creteElement('img');
var imageName = this.firstChild.id;
dragIcon.src = imageName + '.png';
e.dataTransfer.setDragImage(dragIcon, -10, 10);
}
function handleDragOver(e) {
e.preventDefault();
}
function handleDrop(e) {
e.preventDefault();
if (draggingObject != this) {
var draggingGrandpa =
draggingObject.parentElement.parentElement;
var draggedToGrandpa =
this.parentElement.parentElement;
var draggingObjectId =
draggingObject.firstChild.id;
inventoryObject.add(draggedToGrandpa.id, draggingObjectId);
inventoryObject.remove(draggingGrandpa.id, draggingObjectId);
draggingObject.innerHTML = this.innerHTML;
this.innerHTML =
e.dataTransfer.getData('text/html');
this.classList.remove('empty');
draggingObject.classList.add('empty');
}
}
var itemBoxes = document.querySelectorAll('.inventory-box');
[].forEach.call(itemBoxes, funtion(itemBox) {
itembox.addEventListener('dragstart', handleDragStart);
itembox.addEventListener('dragover', handleDragOver);
itembox.addEventListener('drop', handleDrop);
});
Итак, прежде всего, я действительно запутались в 3-й строке кода, который
draggingObject = this;
Так что в этом случае, что {это}? Это просто имя элемента, которое упоминается в itemBoxes, или что-то совсем другое? В нем говорилось, что «это» была позиция падения инвентаря или позиция, в которой элемент будет удален.
Кроме того, почему вам действительно нужен «дедушка»? Позже в коде говорится о прабабудах и бабушке, и я думал, что мы перемещаем только div, в котором находится изображение.
Мой главный вопрос в третьей функции (handleDrop). В третьей строке этой функции draggingObject должен быть равен этому (поскольку он был установлен равным этому в функции handleDragStart). В этом случае код в блоке if не будет выполняться.
Может кто-нибудь, пожалуйста, помогите мне с этой проблемой? Я очень смущен и очень нуждаюсь в помощи.
Спасибо!