ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ рСсурсов ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ drag drop Ρ‚Π°Ρ‰ΠΈ ΠΈ бросай

Π’ΡƒΡ‚ΠΎΡ€ΠΈΠ°Π». Бписок Π·Π°Π΄Π°Ρ‡ с drag & drop

ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ рСсурсов ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ drag drop Ρ‚Π°Ρ‰ΠΈ ΠΈ бросай. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ рСсурсов ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ drag drop Ρ‚Π°Ρ‰ΠΈ ΠΈ бросай. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ рСсурсов ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ drag drop Ρ‚Π°Ρ‰ΠΈ ΠΈ бросай. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ рСсурсов ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ drag drop Ρ‚Π°Ρ‰ΠΈ ΠΈ бросай. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ рСсурсов ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ drag drop Ρ‚Π°Ρ‰ΠΈ ΠΈ бросай

Π’ этом Ρ‚ΡƒΡ‚ΠΎΡ€ΠΈΠ°Π»Π΅ ΠΌΡ‹ рассмотрим, ΠΊΠ°ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ эффСкт drag & drop Π½Π° ванильном JavaScript. Дословный ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ с английского β€” «потяни ΠΈ Π±Ρ€ΠΎΡΡŒΒ» β€” ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΡΡƒΡ‚ΡŒ эффСкта, это Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π·Π½Π°ΠΊΠΎΠΌΠΎΠ΅ Π»ΡŽΠ±ΠΎΠΌΡƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ пСрСтаскиваниС элСмСнтов интСрфСйса. Drag & drop ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Π² Ρ€Π°Π·Π½Ρ‹Ρ… ситуациях β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Ρ‚Π°ΠΊΠΈΡ…:

ΠœΡ‹ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ drag & drop Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ сортировки. Для этого создадим ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ список Π·Π°Π΄Π°Ρ‡.

ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ рСсурсов ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ drag drop Ρ‚Π°Ρ‰ΠΈ ΠΈ бросай. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ рСсурсов ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ drag drop Ρ‚Π°Ρ‰ΠΈ ΠΈ бросай. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ рСсурсов ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ drag drop Ρ‚Π°Ρ‰ΠΈ ΠΈ бросай. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ рСсурсов ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ drag drop Ρ‚Π°Ρ‰ΠΈ ΠΈ бросай. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ рСсурсов ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ drag drop Ρ‚Π°Ρ‰ΠΈ ΠΈ бросай

HTML Drag and Drop API

Π’ стандартС HTML5 Π΅ΡΡ‚ΡŒ API, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ эффСкт drag & drop. Он Π΄Π°Ρ‘Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… событий ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°Ρ…Π²Π°Ρ‚ элСмСнта Π½Π° страницС ΠΌΡ‹ΡˆΡŒΡŽ ΠΈ Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π² Π½ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Рассмотрим этот API ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅.

Π”Π°Π»Π΅Π΅ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ пСрСмСщСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ряд событий, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΡ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… этапах. ΠŸΠΎΠ»Π½Ρ‹ΠΉ список Π΅ΡΡ‚ΡŒ Π½Π° MDN, Π° ΠΌΡ‹ рассмотрим основныС.

ΠŸΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΠΌ ΠΊ созданию нашСго списка Π·Π°Π΄Π°Ρ‡ ΠΈ рассмотрим Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с HTML Drag and Drop API.

Вёрстка ΠΈ стилизация списка Π·Π°Π΄Π°Ρ‡

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ элСмСнтам Π±Π°Π·ΠΎΠ²ΡƒΡŽ ΡΡ‚ΠΈΠ»ΠΈΠ·Π°Ρ†ΠΈΡŽ:

РСализация drag & drop

Π¨Π°Π³ 1. Π Π°Π·Ρ€Π΅ΡˆΠΈΠΌ пСрСтаскиваниС элСмСнтов

Π£ΠΆΠ΅ сСйчас пСрСтаскиваниС доступно для элСмСнтов, Π½ΠΎ ΠΏΠΎΠΊΠ° это выраТаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² появлСнии Ρ„Π°Π½Ρ‚ΠΎΠΌΠ½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ. Π‘Π²ΠΎΠ΅Π³ΠΎ полоТСния элСмСнты Π½Π΅ ΠΌΠ΅Π½ΡΡŽΡ‚, Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Ρ‡ΡƒΡ‚ΡŒ ΠΏΠΎΠ·ΠΆΠ΅.

Π¨Π°Π³ 2. Π”ΠΎΠ±Π°Π²ΠΈΠΌ Ρ€Π΅Π°ΠΊΡ†ΠΈΡŽ Π½Π° Π½Π°Ρ‡Π°Π»ΠΎ ΠΈ ΠΊΠΎΠ½Π΅Ρ† пСрСтаскивания

Π‘ΡƒΠ΄Π΅ΠΌ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ события dragstart ΠΈ dragend Π½Π° всём спискС. Π’ Π½Π°Ρ‡Π°Π»Π΅ пСрСтаскивания Π±ΡƒΠ΄Π΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ класс selected элСмСнту списка, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±Ρ‹Π»ΠΎ Π²Ρ‹Π·Π²Π°Π½ΠΎ событиС. ПослС окончания пСрСтаскивания Π±ΡƒΠ΄Π΅ΠΌ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ этот класс.

Π¨Π°Π³ 3. Π Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ Π»ΠΎΠ³ΠΈΠΊΡƒ пСрСтаскивания

Для поиска nextElement ΠΌΡ‹ использовали Ρ‚Π΅Ρ€Π½Π°Ρ€Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€. Если Π²Ρ‹ Π΅Ρ‰Ρ‘ с Π½ΠΈΠΌ Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹, это ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ, ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π² ΡΡ‚Π°Ρ‚ΡŒΡŽ.

Π’ Ρ†Π΅Π»ΠΎΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠΈΠΉΡΡ Π½Π° этом этапС ΠΊΠΎΠ΄ β€” Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ. Π£ΠΆΠ΅ сСйчас элСмСнты ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΈ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ. Но ΠΏΡ€ΠΈ этом Ρƒ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° Π΅ΡΡ‚ΡŒ нСдостаток β€” ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌΡ‹ΠΉ элСмСнт мСняСт ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Ρ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° курсор ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ элСмСнт. Π’Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ нСдостаточно ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎ ΠΈ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎ. Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π»ΠΎΠ³ΠΈΡ‡Π½Π΅Π΅ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° Ρ†Π΅Π½Ρ‚Ρ€ элСмСнта. Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ вставку Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ курсор пСрСсСчёт Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΡƒΡŽ ось, Π° Π½Π΅ сразу послС навСдСния Π½Π° элСмСнт. Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ это ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, напишСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для получСния nextElement Π΄Ρ€ΡƒΠ³ΠΈΠΌ способом.

Π¨Π°Π³ 4. Π£Ρ‡Ρ‚Ρ‘ΠΌ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ курсора ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ†Π΅Π½Ρ‚Ρ€Π°

Π”Π°Π²Π°ΠΉΡ‚Π΅ Π·Π°ΠΊΡ€Π΅ΠΏΠΈΠΌ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅. Допустим, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ Π΄Π²Π° элСмСнта мСстами β€” Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π½ΠΈΠΆΠ½ΠΈΠΉ элСмСнт, Π½Π°Π²ΠΎΠ΄ΠΈΠΌ курсор Π½Π° элСмСнт ΠΏΠ΅Ρ€Π΅Π΄ Π½ΠΈΠΌ. Пока ΠΌΡ‹ Π½Π΅ ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΠ»ΠΈΡΡŒ ΠΊ Ρ†Π΅Π½Ρ‚Ρ€Ρƒ элСмСнта, Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΊΠ° порядок элСмСнтов Π² DOM ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ. Но ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ курсор пСрСсСчёт Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΡƒΡŽ ось, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌΡ‹ΠΉ элСмСнт Π±ΡƒΠ΄Π΅Ρ‚ вставлСн ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ элСмСнтом, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π½Π°Π²Π΅Π»ΠΈ курсор.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ всё Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π½ΡƒΠΆΠ½ΠΎ: ΠΌΡ‹ отслСТиваСм ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ курсора ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ†Π΅Π½Ρ‚Ρ€Π°, лишниС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² DOM ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈ ΠΈ, Π³Π»Π°Π²Π½ΠΎΠ΅, элСмСнты ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ β€” Π·Π°Π΄Π°Ρ‡Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π°! ΠŸΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ β€” Π² нашСй ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ дСмонстрации.

ΠŸΠΎΠ»Π΅Π·Π½ΠΎΡΡ‚ΠΈ

Drag and drop β€” Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π°ΡΡ‚ΡŒ силы JavaScript

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ·Π½Π°Ρ‚ΡŒ всю ΠΌΠΎΡ‰ΡŒ, Π·Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ΡΡŒ Π½Π° ΠΊΠΎΠ½ΡΡƒΠ»ΡŒΡ‚Π°Ρ†ΠΈΡŽ ΠΈ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚Π΅ Π½Π° курс.

НаТатиС Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ β€” согласиС Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΏΠ΅Ρ€ΡΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ИспользованиС Drag&Drop в HTML 5

ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ рСсурсов ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ drag drop Ρ‚Π°Ρ‰ΠΈ ΠΈ бросай. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ рСсурсов ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ drag drop Ρ‚Π°Ρ‰ΠΈ ΠΈ бросай. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ рСсурсов ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ drag drop Ρ‚Π°Ρ‰ΠΈ ΠΈ бросай. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ рСсурсов ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ drag drop Ρ‚Π°Ρ‰ΠΈ ΠΈ бросай. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ рСсурсов ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ drag drop Ρ‚Π°Ρ‰ΠΈ ΠΈ бросай

Π”ΠΎΠ»Π³ΠΎΠ΅ врСмя для создания Drag&Drop Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π° использовались JavaScript-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΠ΄Π½Π°ΠΊΠΎ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Ρ‹ Π½Π΅ всСгда ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΌΠΎΠ³Π»ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Π’ HTML 5 Π΅ΡΡ‚ΡŒ способ Π³Ρ€Π°ΠΌΠΎΡ‚Π½ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Drag&Drop, с нСбольшим ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ JavaScript. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π½ наглядный ΠΏΡ€ΠΈΠΌΠ΅Ρ€ примСнСния Drag&Drop Π² HTML 5.

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°ΠΌΠΈ

На сСгодняшний дСнь функция Drag&Drop Π² HTML 5 ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ обрабатываСтся всСми соврСмСнными Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠ½Ρ‹ΠΌΠΈ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°ΠΌΠΈ, (частично Π΄Π°ΠΆΠ΅ IE 5.5!), ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Π΅ Ρ‚Π°ΠΊΡƒΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ caniuse.com.

ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ рСсурсов ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ drag drop Ρ‚Π°Ρ‰ΠΈ ΠΈ бросай. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ рСсурсов ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ drag drop Ρ‚Π°Ρ‰ΠΈ ΠΈ бросай. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ рСсурсов ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ drag drop Ρ‚Π°Ρ‰ΠΈ ΠΈ бросай. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ рСсурсов ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ drag drop Ρ‚Π°Ρ‰ΠΈ ΠΈ бросай. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ рСсурсов ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ drag drop Ρ‚Π°Ρ‰ΠΈ ΠΈ бросай

Бобытия Drag&Drop

НиТС пСрСчислСны события Drag&Drop, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ процСсс пСрСтаскивания:

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ dataTransfer

Π—Π΄Π΅ΡΡŒ происходит сам процСсс пСрСтаскивания. НаиболСС Π²Π°ΠΆΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Drag&Drop

Π’Π΅ΠΏΠ΅Ρ€ΡŒ рассмотрим наглядный простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования Drag&Drop, Π³Π΄Π΅ Π΄Π²Π° ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ… синих div’Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² большой красный, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΈΡ… Π½Π° исходноС мСсто.

Начало пСрСтаскивания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

Π’ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ HTML-Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΡƒ Π±Π»ΠΎΠΊΠΎΠ², Π΄ΠΎΠ±Π°Π²ΠΈΠ² Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ draggable:

Π—Π°Ρ‚Π΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ JavaScript-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π½Π°Ρ‡Π°Π»Π° процСсса:

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкС Π·Π°Π΄Π°Π½ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ пСрСтаскивания β€” move, Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ β€” ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π΄Π°Π½Π½Ρ‹Π΅ процСсса β€” Ρ‚ΠΈΠΏ (Text) ΠΈ ID. Π’ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΉ строкС setDragImage опрСдСляСт ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ курсора, Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Π² сСрСдинС ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π° 200Ρ…200 пиксСлСй.

Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ пСрСтаскивания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

ΠŸΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ΡΡ Π·Π°Π΄Π°Ρ‚ΡŒ Ρ‚Ρ€ΠΈ события: dragEnter, dragOver ΠΈ drop:

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, трСбуСтся Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ JavaScript-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ процСсса пСрСтаскивания β€” ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ с элСмСнтами, ΠΊΠΎΠ³Π΄Π° курсор Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΏΡƒΡ‰Π΅Π½:

Π’ Π΄Π°Π½Π½ΠΎΠΌ простом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π·Π°Π΄Π°Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ основныС дСйствия, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ β€” ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ†Π²Π΅Ρ‚Π° Ρ„ΠΎΠ½Π°, добавлСния тСкста ΠΈ Ρ‚.Π΄. Π”Π°Π»Π΅Π΅ β€” Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ этап. Π—Π΄Π΅ΡΡŒ Π·Π°Π΄Π°ΡŽΡ‚ΡΡ дСйствия окончания пСрСтаскивания:

Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, синиС Π±Π»ΠΎΠΊΠΈ послС пСрСтаскивания ΠΌΠΎΠΆΠ½ΠΎ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π½Π° исходноС мСсто. К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это ΠΎΡ‡Π΅Π½ΡŒ просто. ВсС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹, ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ JavaScript-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ создано большоС количСство Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ для Drag&Drop, ΠΈ Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ ΠΎΠ½ΠΈ ΠΏΡ€ΠΎΡ‰Π΅ Π² использовании, Ρ‡Π΅ΠΌ описанный ΠΏΡ€ΠΈΠΌΠ΅Ρ€. Однако скорСС всСго Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ всС Ρ‡Π°Ρ‰Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ связка HTML5 & JavaScript.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Drag’n’Drop API: ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования

Π”ΠΎΠ±Ρ€ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ суток, Π΄Ρ€ΡƒΠ·ΡŒΡ!

Π’ Π΄Π°Π½Π½ΠΎΠΌ Ρ‚ΡƒΡ‚ΠΎΡ€ΠΈΠ°Π»Π΅ ΠΌΡ‹ рассмотрим встроСнный ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ пСрСтаскивания элСмСнтов Π½Π° страницС.

БправСдливости Ρ€Π°Π΄ΠΈ слСдуСт ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ событий ΠΌΡ‹ΡˆΠΈ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Илья ΠšΠ°Π½Ρ‚ΠΎΡ€ Π² своСм ΡƒΡ‡Π΅Π±Π½ΠΈΠΊΠ΅, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ срСдства, ΠΎΠΏΠΈΡ€Π°ΡΡΡŒ Π½Π° ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ.

ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ рСсурсов ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ drag drop Ρ‚Π°Ρ‰ΠΈ ΠΈ бросай. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ рСсурсов ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ drag drop Ρ‚Π°Ρ‰ΠΈ ΠΈ бросай. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ рСсурсов ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ drag drop Ρ‚Π°Ρ‰ΠΈ ΠΈ бросай. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ рСсурсов ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ drag drop Ρ‚Π°Ρ‰ΠΈ ΠΈ бросай. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ рСсурсов ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ drag drop Ρ‚Π°Ρ‰ΠΈ ΠΈ бросай

Для стилизации Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Bootstrap.

Если Π²Π°ΠΌ это интСрСсно, ΠΏΡ€ΠΎΡˆΡƒ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π·Π° ΠΌΠ½ΠΎΠΉ.

Π Π°Π·ΠΌΠ΅Ρ‚ΠΊΠ°:

Π—Π΄Π΅ΡΡŒ Ρƒ нас имССтся ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ с ΠΏΠΎΠ»Π΅ΠΌ для Π²Π²ΠΎΠ΄Π° тСкста Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ для Π΅Π΅ добавлСния Π² список (input-group), Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°-ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ (list-group) для всСх Π·Π°Π΄Π°Ρ‡ (todos-list), Π·Π°Π΄Π°Ρ‡ Π² процСссС выполнСния (in-progress-list) ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ (completed-list). Π§Ρ‚ΠΎ касаСтся Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² Β«dataΒ», Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для раздСлСния стилизации ΠΈ управлСния: классы β€” для стилизации, data β€” для управлСния.

ΠšΠ»Π°ΡΡΡ‹ Β«in-progressΒ» ΠΈ Β«completedΒ» слуТат ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌΠΈ нахоТдСния Π·Π°Π΄Π°Ρ‡ΠΈ Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ΅. Класс Β«dropΒ» ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ попадания Π·Π°Π΄Π°Ρ‡ΠΈ Π² Π·ΠΎΠ½Ρƒ для «бросания».

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ скрипту, ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ всС события пСрСтаскивания, Π½ΠΎ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΈΠ· основных.

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ Π³Π»Π°Π²Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒΡΡ поиск элСмСнтов ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π΅Π»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° событий:

Π Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΊΠ»ΠΈΠΊΠ°:

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ нСпосрСдствСнно ΠΊ ΠΏΠ΅Ρ€Π΅Ρ‚Π°ΡΠΊΠΈΠ²Π°Π½ΠΈΡŽ.

Для Π½Π°Ρ‡Π°Π»Π° Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΠ΅ Π² Π·ΠΎΠ½Ρƒ для «бросаниС» ΠΈ ΡƒΡ…ΠΎΠ΄ ΠΈΠ· Π½Π΅Π΅ посрСдством добавлСния/удалСния ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ класса:

Π”Π°Π»Π΅Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ Π½Π°Ρ‡Π°Π»ΠΎ пСрСтаскивания:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ элСмСнт, находящийся ΠΏΠΎΠ΄ пСрСтаскиваСмым. Π­Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒ Π·Π°Π΄Π°Ρ‡ΠΈ Π² спискС, Ρ‚.Π΅. ΠΌΠ΅Π½ΡΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡ΠΈ Π² ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ΅ мСстами. ΠŸΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ события Β«mousemoveΒ» для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ Β«elementFromPoint(x, y)Β». ΠŸΡ€Π΅Π»Π΅ΡΡ‚ΡŒ рассматриваСмого интСрфСйса состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ для опрСдСлСния Β«Π½ΠΈΠ·Π»Π΅ΠΆΠ°Ρ‰Π΅Π³ΠΎΒ» элСмСнта Π½Π°ΠΌ достаточно ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ событиС Β«dragoverΒ»:

НаконСц, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ событиС Β«dropΒ» («бросаниС»):

Π’ΠΎΡ‚ ΠΈ всС. Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, Π½ΠΈΡ‡Π΅Π³ΠΎ слоТного. Π—Π°Ρ‚ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ возмоТности ΠΏΠΎ добавлСнию интСрактивности Π½Π° страницу. ΠžΡΡ‚Π°Π»ΠΎΡΡŒ Π΄ΠΎΠΆΠ΄Π°Ρ‚ΡŒΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Π΅ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ Π΄Π°Π½Π½ΡƒΡŽ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΡŽ, ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ всСм ΡΡ‡Π°ΡΡ‚ΡŒΠ΅.

НадСюсь, Π²Ρ‹ нашли для сСбя Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ интСрСсноС. Π‘Π»Π°Π³ΠΎΠ΄Π°Ρ€ΡŽ Π·Π° Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π³ΠΎ дня.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠœΠ΅Ρ‚ΠΎΠ΄ создания DRAG and DROP эффСкта

ΠŸΡ€ΠΈΠ΄Ρ Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ ΠΊ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ DRAG and DROP столкнулся с ΠΎΡ‡Π΅Π½ΡŒ тяТСлым Π΅Ρ‘ описаниСм (Π­Ρ‚ΠΎ ΠΌΠΎΠ΅ ΡΡƒΠ±ΡŠΠ΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΌΠ½Π΅Π½ΠΈΠ΅. ΠŸΡ€ΠΎΡˆΡƒ с Π½ΠΈΠΌ Π½Π΅ ΡΠΎΠ³Π»Π°ΡˆΠ°Ρ‚ΡŒΡΡ, Π° ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ всС Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° этот вопрос с ΠΌΠ½ΠΎΠ³ΠΈΡ… сторон). И Ρ€Π΅ΡˆΠΈΠ» Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΠ°Ρ€Ρƒ статСй, Π½Π°Ρ†Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π½Π° Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², ΠΊΡ‚ΠΎ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΏΠΎΠ·Π½Π°Ρ‚ΡŒ Π΄Π·Π΅Π½.

Π‘Ρ‚Π°Ρ‚ΡŒΡ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· Π΄Π²ΡƒΡ… частСй:

ΠŸΠ°Ρ€Π°Π³Ρ€Π°Ρ„ β„–1 ΠœΠ΅Ρ‚ΠΎΠ΄ создания DRAG and DROP эффСкта

ΠŸΠ΅Ρ€Π΅Π΄ Π½Π°Ρ‡Π°Π»ΠΎΠΌ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ Ρ€Π°Π·Π±ΠΎΡ€Π°, посмотрим повСрхностно. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ сСбя Π² Ρ€ΠΎΠ»ΠΈ Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠ°, Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΠΈΡ‚ΡŒ ΠΊΠΎΡ€ΠΎΠ±ΠΊΡƒ с ΠΎΠ΄Π½ΠΎΠ³ΠΎ мСста Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠ΅. Для Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠ° это «Ну взял, Π½Ρƒ пСрСнСс. Π“ΠΎΡ‚ΠΎΠ²ΠΎ!Β», Π° для программиста β€œΠŸΠΎΠ΄ΠΎΡˆΠ΅Π» ΠΊ ΠΊΠΎΡ€ΠΎΠ±ΠΊΠ΅, наклонился, взял ΠΊΠΎΡ€ΠΎΠ±ΠΊΡƒ, поднял ΠΊΠΎΡ€ΠΎΠ±ΠΊΡƒ, ΠΏΡ€ΠΎΡˆΠ΅Π» N шагов, наклонился, отпустил ΠΊΠΎΡ€ΠΎΠ±ΠΊΡƒ.”. Π― это ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°Ρ‡Π°Π»ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠΈΠ³Ρ€Π°ΠΉΡ‚Π΅ всС Π² Π³ΠΎΠ»ΠΎΠ²Π΅, ΠΏΠΎ шагам ΠΈ Π²Ρ‹ станСтС Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±Π»ΠΈΠΆΠ΅ ΠΊ истинС.

Π― Ρ…ΠΎΡ‡Ρƒ ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² создания Π΄Π°Π½Π½ΠΎΠ³ΠΎ эффСкта нСсколько ΠΈ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡ‡Ρ‚ΠΈΡ‚Π΅ ΠΎ всСх. Π― Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡΡŒ Ρ‚Π΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΡΡ‡ΠΈΡ‚Π°ΡŽ самым ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ.

ΠŸΡ€ΠΈ создании DRAG and DROP ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ шагом Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ, ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ draggable=’true’.

,
На ΠΏΠ΅Ρ€Π²ΠΎΠΌ этапС я Ρ…ΠΎΡ‡Ρƒ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ сам процСсс, Π° послС ΠΌΡ‹ Π΅Π³ΠΎ распространим Π½Π° всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. ΠœΡ‹ сСйчас Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ Π² JS ΠΈ ΠΊΠ°ΠΊ Π²Π°ΠΌ извСстно, Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ события, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΈΠ²ΡΠ·Π°Ρ‚ΡŒ свои ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ дСйствий. Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ события для создания DRAG and DROP:

dragstart β€” происходит, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Ρ‚Π°ΡΠΊΠΈΠ²Π°Ρ‚ΡŒ элСмСнт.
drag β€” происходит, ΠΊΠΎΠ³Π΄Π° элСмСнт пСрСтаскиваСтся.
dragend β€” происходит, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ» пСрСтаскиваниС элСмСнта.
dragenter β€” происходит, ΠΊΠΎΠ³Π΄Π° пСрСтаскиваСмый элСмСнт ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π² Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.
dragleave β€” происходит, ΠΊΠΎΠ³Π΄Π° пСрСтаскиваСмый элСмСнт ΠΏΠΎΠΊΠΈΠ΄Π°Π΅Ρ‚ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.
dragover β€” происходит, ΠΊΠΎΠ³Π΄Π° пСрСтаскиваСмый элСмСнт находится Π½Π°Π΄ Ρ†Π΅Π»ΡŒΡŽ.
drop β€” происходит, ΠΊΠΎΠ³Π΄Π° пСрСтаскиваСмый элСмСнт ΠΏΠ°Π΄Π°Π΅Ρ‚ Π½Π° Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΡ‡Π΅Π½ΡŒ ваТная информация! Бобытия дСлятся Π½Π° Π΄Π²Π΅ Π³Ρ€ΡƒΠΏΠΏΡ‹. Для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ элСмСнта (Ρ‚ΠΎΡ‚ ΠΊΠΎΠ³ΠΎ ΠΌΡ‹ пСрСтаскиваСм): dragstart, Drag, Dragend. Для ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰Π΅Π³ΠΎ элСмСнта (ΠΊΡƒΠ΄Π° пСрСтаскиваСм): Dragenter, Dragleave, Dragover, Drop. И эти события Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, Π½ΠΎ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ Π±Π΅Π· Π΄Ρ€ΡƒΠ³Π°.

К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ: НСобходимо ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Ρ‚Π°ΠΌ, Π³Π΄Π΅ ΠΌΡ‹ отпустили ΠΊΠ½ΠΎΠΏΠΊΡƒ ΠΌΡ‹ΡˆΠΈ. Π­Ρ‚Π° Π·Π°Π΄Π°Ρ‡Π° Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰Π΅ΠΉ части.

БСсспорно, ΠΏΡ€ΠΈΠΌΠ΅Ρ€ сдСлан Π½Π° ΠΊΠΎΠ»Π΅Π½ΠΊΠ΅, Π½ΠΎ ΠΎΠ½ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

Π― ΡΡ‡ΠΈΡ‚Π°ΡŽ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ с ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ событиями Π½ΠΈ ΠΊ Ρ‡Π΅ΠΌΡƒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ссли Π² строчкС d1.addEventListener(‘dragstart’,function() <Π²Ρ‹ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ ‘dragstart’ Π½Π° любоС Π΄Ρ€ΡƒΠ³ΠΎΠ΅ событиС, сами смоТСтС с Π½ΠΈΠΌ ΠΏΠΎΠΈΠ³Ρ€Π°Ρ‚ΡŒ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ интСрСсныС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹. Π”Π°Π²Π°ΠΉΡ‚Π΅ Π΄Π°ΠΆΠ΅ Ρ‚Π°ΠΊ, ΠΏΠΎΠΈΠ³Ρ€Π°ΠΉΡ‚Π΅ ΠΈ Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ показалось Π½Π΅ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ ΠΈ интСрСсным ΠΏΠΎΠΊΠ°ΠΆΠΈΡ‚Π΅ Π² коммСнтариях, Ρ‚Π°ΠΊ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΡƒΠ·Π½Π°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΈ сам смоТСт это ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ.

ΠŸΠ°Ρ€Π°Π³Ρ€Π°Ρ„ β„–2. НС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ DROP Π² DRAG and DROP

Когда Π²Ρ‹ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅Ρ‚Π΅ всС события, Π²Ρ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚Π΅ Ρ‡Ρ‚ΠΎ drop Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Π­Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π΄Π΅Π»Π°ΡŽΡ‚ Π°Ρ‚Π°Ρ‚Π° Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ Ρ€Π΅ΡˆΠΈΠ» «И это всё… Π₯ΡƒΡ…, Π΅Ρ€ΡƒΠ½Π΄Π°Β».

Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠΈΡ‚Π΅ ΠΊΠ°ΠΊ Ρ„Π°ΠΊΡ‚, Π±Π΅Π· Π½Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Как Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ drag&drop Π½Π° чистом JavaScript

Π’ этом Ρ‚ΡƒΡ‚ΠΎΡ€ΠΈΠ°Π»Π΅ ΠΌΡ‹ рассмотрим, ΠΊΠ°ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ эффСкт drag&drop Π½Π° ванильном JavaScript. Дословный ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ с английского β€” «потяни ΠΈ Π±Ρ€ΠΎΡΡŒΒ» β€” ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΡΡƒΡ‚ΡŒ эффСкта, это Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π·Π½Π°ΠΊΠΎΠΌΠΎΠ΅ Π»ΡŽΠ±ΠΎΠΌΡƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ пСрСтаскиваниС элСмСнтов интСрфСйса.

Drag & drop ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Π² Ρ€Π°Π·Π½Ρ‹Ρ… ситуациях β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Ρ‚Π°ΠΊΠΈΡ…:

ΠŸΡ€ΠΎΡΡ‚ΠΎΠ΅ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ полоТСния элСмСнта.

Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° элСмСнтов с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ пСрСтаскивания. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ β€” сортировка ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡Π΅ΠΊ Π·Π°Π΄Π°Ρ‡ Π² таск-Ρ‚Ρ€Π΅ΠΊΠ΅Ρ€Π΅.

ИзмСнСниС контСкста элСмСнта. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ β€” пСрСнос Π·Π°Π΄Π°Ρ‡ΠΈ Π² таск-Ρ‚Ρ€Π΅ΠΊΠ΅Ρ€Π΅ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ списка Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ.

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΎΠΊΠ½ΠΎ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°.

ΠœΡ‹ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ drag & drop Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ сортировки. Для этого создадим ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ список Π·Π°Π΄Π°Ρ‡.

HTML Drag and Drop API

Π’ стандартС HTML5 Π΅ΡΡ‚ΡŒ API, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ эффСкт drag & drop. Он Π΄Π°Ρ‘Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… событий ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°Ρ…Π²Π°Ρ‚ элСмСнта Π½Π° страницС ΠΌΡ‹ΡˆΡŒΡŽ ΠΈ Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π² Π½ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Рассмотрим этот API ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅.

Π”Π°Π»Π΅Π΅ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ пСрСмСщСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ряд событий, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΡ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… этапах. ΠŸΠΎΠ»Π½Ρ‹ΠΉ список Π΅ΡΡ‚ΡŒ Π½Π° MDN, Π° ΠΌΡ‹ рассмотрим основныС.

drag β€” срабатываСт ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ нСсколько сотСн миллисСкунд, ΠΏΠΎΠΊΠ° элСмСнт пСрСтаскиваСтся.

dragstart β€” срабатываСт Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π½Π°Ρ‡Π°Π»Π° пСрСтаскивания элСмСнта.

dragend β€” срабатываСт Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° пСрСтаскиваниС элСмСнта Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΎ.

dragover β€” срабатываСт ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ нСсколько сотСн миллисСкунд, ΠΏΠΎΠΊΠ° пСрСтаскиваСмый элСмСнт находится Π½Π°Π΄ Π·ΠΎΠ½ΠΎΠΉ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡΠ±Ρ€ΠΎΡˆΠ΅Π½.

drop β€” срабатываСт Π² Ρ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° элСмСнт Π±ΡƒΠ΄Π΅Ρ‚ Π±Ρ€ΠΎΡˆΠ΅Π½, Ссли ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Ρ‘Π½ Π² Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π·ΠΎΠ½Ρƒ.

ΠŸΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΠΌ ΠΊ созданию нашСго списка Π·Π°Π΄Π°Ρ‡ ΠΈ рассмотрим Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с HTML Drag and Drop API.

Вёрстка ΠΈ стилизация списка Π·Π°Π΄Π°Ρ‡

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ элСмСнтам Π±Π°Π·ΠΎΠ²ΡƒΡŽ ΡΡ‚ΠΈΠ»ΠΈΠ·Π°Ρ†ΠΈΡŽ:

РСализация drag & drop

Π¨Π°Π³ 1. Π Π°Π·Ρ€Π΅ΡˆΠΈΠΌ пСрСтаскиваниС элСмСнтов

Π£ΠΆΠ΅ сСйчас пСрСтаскиваниС доступно для элСмСнтов, Π½ΠΎ ΠΏΠΎΠΊΠ° это выраТаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² появлСнии Ρ„Π°Π½Ρ‚ΠΎΠΌΠ½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ. Π‘Π²ΠΎΠ΅Π³ΠΎ полоТСния элСмСнты Π½Π΅ ΠΌΠ΅Π½ΡΡŽΡ‚, Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Ρ‡ΡƒΡ‚ΡŒ ΠΏΠΎΠ·ΠΆΠ΅.

Π¨Π°Π³ 2. Π”ΠΎΠ±Π°Π²ΠΈΠΌ Ρ€Π΅Π°ΠΊΡ†ΠΈΡŽ Π½Π° Π½Π°Ρ‡Π°Π»ΠΎ ΠΈ ΠΊΠΎΠ½Π΅Ρ† пСрСтаскивания

Π‘ΡƒΠ΄Π΅ΠΌ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ события dragstart ΠΈ dragend Π½Π° всём спискС. Π’ Π½Π°Ρ‡Π°Π»Π΅ пСрСтаскивания Π±ΡƒΠ΄Π΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ класс selected элСмСнту списка, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±Ρ‹Π»ΠΎ Π²Ρ‹Π·Π²Π°Π½ΠΎ событиС. ПослС окончания пСрСтаскивания Π±ΡƒΠ΄Π΅ΠΌ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ этот класс.

Π¨Π°Π³ 3. Π Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ Π»ΠΎΠ³ΠΈΠΊΡƒ пСрСтаскивания

Π”Π΅Π»Π°Π΅ΠΌ всю ΠΎΠ±Π»Π°ΡΡ‚ΡŒ списка доступной для сброса.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ, Ρ‡Ρ‚ΠΎ событиС dragover сработало Π½Π΅ Π½Π° Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΌ элСмСнтС, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΈΠ½Π°Ρ‡Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ элСмСнт Π½Π΅Ρ‚ смысла β€” ΠΎΠ½ ΡƒΠΆΠ΅ Π½Π° Π½ΡƒΠΆΠ½ΠΎΠΌ мСстС.

Π’Π°ΠΊΠΆΠ΅ провСряСм, Ρ‡Ρ‚ΠΎ dragover сработало ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· элСмСнтов списка. Π­Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ курсор ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΈ Π½Π° пустом пространствС ΠΌΠ΅ΠΆΠ΄Ρƒ элСмСнтами, Π° ΠΎΠ½ΠΎ нас Π½Π΅ интСрСсуСт.

Находим элСмСнт, ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ вставку. Π‘Π΄Π΅Π»Π°Π΅ΠΌ это, сравнив ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ элСмСнта ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°Π²Π΅Π΄Ρ‘Π½ курсор.

ВставляСм Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ элСмСнт Π½Π° Π½ΠΎΠ²ΠΎΠ΅ мСсто.

Для поиска nextElement ΠΌΡ‹ использовали Ρ‚Π΅Ρ€Π½Π°Ρ€Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€. Если Π²Ρ‹ Π΅Ρ‰Ρ‘ с Π½ΠΈΠΌ Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹, это ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ, ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π² ΡΡ‚Π°Ρ‚ΡŒΡŽ.

Π’ Ρ†Π΅Π»ΠΎΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠΈΠΉΡΡ Π½Π° этом этапС ΠΊΠΎΠ΄ β€” Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ. Π£ΠΆΠ΅ сСйчас элСмСнты ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΈ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ. Но ΠΏΡ€ΠΈ этом Ρƒ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° Π΅ΡΡ‚ΡŒ нСдостаток β€” ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌΡ‹ΠΉ элСмСнт мСняСт ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Ρ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° курсор ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ элСмСнт. Π’Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ нСдостаточно ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎ ΠΈ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎ. Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π»ΠΎΠ³ΠΈΡ‡Π½Π΅Π΅ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° Ρ†Π΅Π½Ρ‚Ρ€ элСмСнта. Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ вставку Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ курсор пСрСсСчёт Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΡƒΡŽ ось, Π° Π½Π΅ сразу послС навСдСния Π½Π° элСмСнт. Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ это ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, напишСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для получСния nextElement Π΄Ρ€ΡƒΠ³ΠΈΠΌ способом.

Π¨Π°Π³ 4. Π£Ρ‡Ρ‚Ρ‘ΠΌ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ курсора ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ†Π΅Π½Ρ‚Ρ€Π°

Π”Π°Π²Π°ΠΉΡ‚Π΅ Π·Π°ΠΊΡ€Π΅ΠΏΠΈΠΌ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅. Допустим, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ Π΄Π²Π° элСмСнта мСстами β€” Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π½ΠΈΠΆΠ½ΠΈΠΉ элСмСнт, Π½Π°Π²ΠΎΠ΄ΠΈΠΌ курсор Π½Π° элСмСнт ΠΏΠ΅Ρ€Π΅Π΄ Π½ΠΈΠΌ. Пока ΠΌΡ‹ Π½Π΅ ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΠ»ΠΈΡΡŒ ΠΊ Ρ†Π΅Π½Ρ‚Ρ€Ρƒ элСмСнта, Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΊΠ° порядок элСмСнтов Π² DOM ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ. Но ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ курсор пСрСсСчёт Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΡƒΡŽ ось, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌΡ‹ΠΉ элСмСнт Π±ΡƒΠ΄Π΅Ρ‚ вставлСн ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ элСмСнтом, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π½Π°Π²Π΅Π»ΠΈ курсор.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ всё Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π½ΡƒΠΆΠ½ΠΎ: ΠΌΡ‹ отслСТиваСм ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ курсора ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ†Π΅Π½Ρ‚Ρ€Π°, лишниС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² DOM ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈ ΠΈ, Π³Π»Π°Π²Π½ΠΎΠ΅, элСмСнты ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ β€” Π·Π°Π΄Π°Ρ‡Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π°! ΠŸΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ β€” Π² нашСй ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ дСмонстрации.

ΠŸΠΎΠ»Π΅Π·Π½ΠΎΡΡ‚ΠΈ

HTML Drag and Drop API Π½Π° MDN. Вся основная информация ΠΎΠ± API.

Native HTML5 Drag and Drop. Π‘Ρ‚Π°Ρ‚ΡŒΡ с описаниСм основных возмоТностСй API ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ использования. Π•ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ Π½Π° русский.

How to make a Drag-and-Drop file uploader with vanilla JavaScript. Π‘Ρ‚Π°Ρ‚ΡŒΡ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Ρ„Π°ΠΉΠ»ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ drag & drop.

Drag & drop с событиями ΠΌΡ‹ΡˆΠΈ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ°ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ эффСкт Π±Π΅Π· использования HTML Drag and Drop API. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ·-Π·Π° ΠΏΠ»ΠΎΡ…ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ API ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹ΠΌΠΈ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°ΠΌΠΈ.

10 Best Drag And Drop JavaScript Libraries. Бписок JavaScript-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ встроСнный drag & drop.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *