Всичко е drag’n’drop, HTML5 Tutorial
Стандартът HTML5 включва поведение на плъзгане в началото. Той е реализиран от новия атрибут за плъзгане и поредица от събития за всеки етап от действия за преместване на обекти. Има седем от тях:
- dragstart - събитие от началото на плъзгане на обект;
- плъзгане - преместване на обекта;
- dragenter - събитието се задейства, когато влаченият обект уцели целевия обект;
- dragleave - влаченият обект напуска целевия обект;
- dragover - събитието се задейства, когато влаченият обект се движи над целевия обект;
- drop - събитието се извиква, когато обектът, който се премества, удари обекта на приемника и потребителят освободи бутона на мишката;
- dragend - потребителят спира да влачи обекта.
Това е всичко, но нека се опитаме да създадем нещо полезно с този комплект.
На първо място, ние се нуждаем от визуални обекти, което означава html маркиране и свързани стилове. Нека създадем обекти:
Резултатът може да се види на фиг. 78.
Нашата задача е да осигурим възможността да преместваме квадратите с числа вътре в големия правоъгълник в произволен ред (може би това ще бъде нещо като игра или пъзел). Нека започнем с предоставянето на самата възможност за плъзгане и пускане на обекти с мишката (по-нататък ще използваме javascript - рамката jQuery - отново само за намаляване на количеството код):
Същият ефект ще даде
Фигура: 78. Всичко е готово за плъзгане и пускане
Фигура: 79. Започнете да влачите
Няма да спрем дотук - ще се придвижим към целта, използвайки горния модел на събитие. Първо, нека започнем да се движим:
Това. добавете EventListener ('dragstart', handleDragStart, false); >);
Засега нека просто направим плаващия обект полупрозрачен:
Сега нека определим целевата зона на движение. Имаме този div с идентификатора "tr". Нека го оборудваме с манипулатор на събития onDragenter и onDagleave:
Това. addEventListener ('dragenter', handleDragEnter, false); това. addEventListener (‘dragleave’, handleDragLeave, false); >);
Сега нека създадем надклас, който определя целевата област в момента, когато плъзгащият се обект е над него (трябва да бъде "маркиран" само за удобство):
Граница: 2px пунктирана # 000:
Много просто: var inCont = 0; функция handleDragEnter (e) < $(this).addClass(‘over’); return false; inCont = 1;
Сега движението е визуално рамкирано (фиг. 80), но засега това не е особено полезно, трябва реално движение.
Фигура: 80. Нека определим целевата област