Нанесете обектно-ориентиран плъзгане н капка

Препоръчителна четене посочено глава, преди да преминат.

В сложни приложения Drag'n'Drop има редица особености:

DragZone плъзгате елементи от трансфер-целева зона в зоната dropTarget. В тази зона се не се прехвърля.

Например - двата списъка, от които се нуждаете за трансфер на клетките от един към друг. В този случай списъкът е един трансфер област, вторият --purpose района.

Възможно е, че трансферът се осъществява в рамките на един и същ списък. Така dragZone == dropTarget.

На страницата, може да има няколко различни зони на транспорта и зони на целите си.

трансфер обработка завършване може да бъде асинхронно със сървъра за уведомяване.

Тя трябва да бъде лесно да добавите нов вид транспортни зони или целева зона, както и разширяване на съществуващото поведение.

Рамката за прехвърляне трябва да бъде разширяеми обмислят сложни сценарии.

Всичко това е съвсем постижимо. Но тази рамка е описана в статията Мишка: Drag'n'Drop по-дълбоко. Ние трябва да Преструктуриране на и разделете на предприятието.

Ще има 4 лица:

На страница оформление по-долу можете да прехвърляте студенти от списъка в ляво - в дясно, един от отборите, или "кошница":

Нанесете обектно-ориентиран плъзгане н капка

Ето списъка на левия трансфер площ ListDragZone. списък с правила - един ListDropTarget няколко цели зони. Освен това, коша е също целта на зона специфичен тип RemoveDropTarget.

В тази книга, ние прилагаме един пример, където възлите на дървото може да бъде преместен вътре в нея. Това означава, че едно дърво, което е едновременно TreeDragZone и TreeDropTarget.

дървовидната структура се състои от вложени списъци с глава в СПАН:

dragManager Дежурният - работа с мишка събития и координация на всички други лица в процеса на прехвърляне.

Следният код трябва да е очевидно, в смисъл, ако прочетете предишната статия. Задачата се изважда и се отстранява от нея допълнителна функционалност, която се премества в други единици.

Ако го е причинило по методи onDrag * неразбираем - виж по-нататък в описанието на други обекти.

Трансфер Zone обект до дървото, всъщност, не въвежда нищо ново в сравнение с DragZone.

Той предефинира само _makeAvatar да създаде TreeDragAvatar.

трансфер район, който го е създал.

В инициализация, ние можем да клонираме _dragZoneElem. или да създадете красива гледка елемент трансфер и го поставете в _elem.

Моля, обърнете внимание, че е възможно, че кликването не беше на SPAN заглавие. просто някъде на дървото. В този случай, initFromEvent връща фалшиви, както и прехвърлянето не се стартира.

Като правило, това отнема DropTarget преносим единица в себе си, но като специално организиран процес на вмъкване - трябва да бъдат описани в извлечен клас. Различни видове райони правят различни, когато поставяте: TreeDropTarget вмъква елемент като дете, и RemoveDropTarget - премахва.

Както се вижда от кода по-горе, DropTarget по подразбиране се отнася единствено за проследяване и показване на "тъчдаун". По подразбиране, единственият възможен "точка за кацане" по себе си е елемент на зоната. В по-сложни ситуации, може да бъде под-елемент.

За използване в действителност необходимия минимум, за да замени резултат на преработка в onDragEnd за трансфер.

TreeDropTarget съдържа код, който е специфичен за дървото:

  • Прехвърляне индикация на елемента: методи и _showHoverIndication _hideHoverIndication.
  • Получаване на текущата точка в метода на кацане _targetElem _getTargetElem. Тя може да бъде само заглавния възел на дървото, и допълнително потвърдено, че това не е потомък на портативно устройство.
  • Обработка успешен трансфер в onDragEnd. вмъкване avatar.dragZoneElem източник възел до възел съответстващ _targetElem.

източник код за пример е изцяло в пясък.

Сингълтън класове и dragManager Drag * определят обща рамка. Те са наследени конкретни обекти. За да създадете новите зони е достатъчно, за да наследи стандартните класове и да ги замени.

Mini-рамка за Drag'n'Drop, която е представена тук, е пренаписан и актуализирана версия на истинска библиотека, въз основа на които е била създадена много успешни миграция скриптове.

В зависимост от вашите нужди, можете да го удължи, добавете прехвърлянето на няколко обекта в същото време, да подкрепя събития и други функции.

Към днешна дата, всеки сериозен рамка, има библиотека за Drag'n'Drop. Тя работи по същия начин, но да се направи универсално правоприемство - не е лесно нещо. Често това е претоварен с излишна функционалност, или обратното - не е достатъчно, за да се разшири на правилните места. Разбирането за това как тя може да се уреди, като пример в тази статия, може да ви помогне да се адаптират съществуващия код, за да отговаря на нуждите ви.