Показать сообщение отдельно
  #5 (permalink)  
Старый 16.01.2020, 09:21
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от Aetae
Не рекомендую использовать нативный d&d - слишком много ручной работы, граблей и подводных камней для чего угодно кроме "базовых примеров"
Вы определённо используете не по назначению! Это не про «переместить картинку с одного места на другое», это в первую очередь про перемещение данных и за рамки браузера тоже. Это про переместить фото на рабочий стол, перетянуть текст (например, для поиска в новой вкладке), перетянуть файл с рабочего стола в веб-приложение и пр.

Leon2110, у вас разметка определённо усложнена... Вот ваш пример (только разметка, достаточно указать, что должно перетаскиваться (атрибут draggable="true"), в какой элемент, можно перетаскивать (атрибут dropzone), также вы можете захотеть, чтобы определённые dropzone могли принимать более чем один элемент (можно сделать, например, при помощи собственного атрибута data-multiple, это вы для себя решаете, что по умолчанию dropzone принимает только один элемент, а при указании data-multiple — сколько угодно)) Вот ваш пример в более читаемом виде...
<section id="game-1">
	<h1>Расставь пропущенные слова в предложении</h1>
	<ul dropzone data-multiple>
		<li draggable="true">Магазин</li>
		<li draggable="true">Молоко</li>
		<li draggable="true">Хлеб</li>
	</ul>
	<p>
		Он пошел в <span dropzone></span>, чтобы купить <span dropzone></span> и свежий <span dropzone></span> на ужин.
	</p>
</section>


В принципе, оперируя атрибутами draggable="true", dropzone и data-multiple можно описать игры в слова, типа «заполнить пропуски», «расставить буквы», а также «собрать пазл» и пр. подобное.

При отпускании элемента с атрибутом draggable="true" над элементом с атрибутом dropzone происходит всплывающее событие drop (вообще-то оно происходит везде, но вас интересуют только взаимодействие элементов с атрибутами draggable="true" и dropzone) Отслеживая это событие, вы сможете, например, когда определённые ячейки в игре будут заполнены, проверить правильность заполнения (даже при помощи серверной программы!) Также вас наверняка интересует область видимости, т. е. чтобы в случае нескольких игр на странице, нельзя было элементы от одной игры перетаскивать в другие игры. (В скрипте, который я вам приведу, область видимости ограничивается ближайшим элементом с селектором section или .task)

Стили вы можете применить ко всем этим элементам, возможности безграничны!

Теперь рабочий пример. Вот к вашему примеру ещё «пазл», чтобы было видно, как работает область видимости — https://codepen.io/Malleys/pen/GRgXqJW?editors=1010

Последний раз редактировалось Malleys, 16.01.2020 в 09:23.
Ответить с цитированием