Í langan tíma hefur JavaScript virka verið til sem gerir okkur kleift að búa til slá og sleppa tengi, en ekkert þessara framkvæmda var innfæddur í vafranum.
Í HTML5, höfum við innfæddur aðferð til að búa til sleppa og sleppa tengi (með smá hjálp frá JavaScript).
Ég ætla að láta þig vita hvernig á að ná þessu ...
Mig langar til að fá þetta út úr því áður en við vorum: Nú er HTML5 dregið og sleppt stutt af öllum helstu skjáborðum (þ.mt IE (jafnvel IE 5.5 hefur hluta stuðning)) en það er ekki stutt af einhverjum vinsælum farsíma vafra.
Á hverju stigi draga og sleppa aðgerðinni er annar atburður rekinn þannig að vafrinn veit hvað JavaScript kóða til að framkvæma; atburðirnir eru:
Með öllum þessum atburðum hlustendum hefur þú mikla stjórn á því hvernig tengi þín virkar og nákvæmlega hvernig það virkar við mismunandi aðstæður.
Þetta er þar sem allir draga og sleppa galdur gerist; Þessi hlutur geymir gögnin sem send voru með aðgerðinni sem draga. Gögnin geta verið sett og sótt á ýmsan hátt, mikilvægustu eru:
Nú munum við byrja að búa til okkar einfaldur draga og sleppa dæmi, þú getur séð að við höfum tvær litlir divs og stærri, við getum dregið og sleppt þeim litlum innan stóra og við getum jafnvel flutt þau aftur.
Það fyrsta sem við þurfum að gera er að búa til HTML okkar. Við gerum skiltin sem hægt er að draga með draggable eiginleiki, eins og svo:
draggable="true">
Þegar þetta er gert verðum við að skilgreina javascript virka sem mun hlaupa þegar við byrjum að draga þennan þátt:
function dragStart(ev) {ev.dataTransfer.effectAllowed='move';ev.dataTransfer.setData("Text", ev.target.getAttribute('id')); ev.dataTransfer.setDragImage(ev.target,100,100);return true;}
Í þessum kóða lýsum við fyrst fyrir hvaða tegund af áhrifum við leyfum í aðgerðinni og við stillum það til að færa, í annarri línu setjum við gögnin fyrir aðgerðina og í þessu tilfelli er tegundin Texti og gildið er auðkenni frumefnisins við erum að draga. Eftir þetta notum við setDragImage aðferðina til að stilla hvað við munum draga og þá þar sem bendillinn verður á meðan að draga, og þar sem teningur er 200 með 200px setti ég það á miðju. Að lokum skilum við aftur satt.
Til þess að þáttur geti tekið við dropi þarf að hlusta á 3 mismunandi viðburði: dragEnter, dragOver og einnig dropahættið svo við skulum bæta þessu við HTML okkar í Div með kennitölu stórs:
Nú þegar við bættum viðburðum hlustendum þurfum við að búa til þessar aðgerðir sem við munum byrja með dráttarvélin og dráttarvefinn:
function dragEnter(ev) {ev.preventDefault();return true;}function dragOver(ev) {ev.preventDefault();}
Í fyrsta aðgerðinni skilgreinum við það sem við viljum gerast þegar þátturinn sem við erum að draga nær til frumefnisins sem það er að falla í, í þessu tilviki koma aðeins í veg fyrir sjálfgefna hegðun vafrans en þú getur gert nokkrar hluti eins og að breyta bakgrunnur eða bæta við smá texta til að gefa til kynna að notandinn dragi til rétta svæðisins og með því að nota dragleave atburðinn geturðu breytt þeim breytingum sem þú hefur gert. Næst í aðgerðinni dragOver koma í veg fyrir að sjálfgefið sé að leyfa dropanum .
Næsta hluti er þar sem við skilgreinir virkni fyrir þegar við fallum í raun þáttinn á viðkomandi mark:
function dragDrop(ev) {var data = ev.dataTransfer.getData("Text");ev.target.appendChild(document.getElementById(data));ev.stopPropagation();return false;}
Í þessum síðasta hluta setjum við fyrst breytu sem kallast gögn þar sem við fáum öll gögnin sem eru tiltæk fyrir textasniðið og þá bætum við þau gögn (sem verða þátturinn sem við erum að draga) við div þar sem við viljum falla þátturinn. Að lokum snertir endanlega eins og að stoppa fjölgun og einnig koma aftur á ósatt.
Athuga kynningu , getum við séð að við gerðum einnig viss um að tveir deildirnar gætu verið dregnar aftur til upprunalegu staðsetningar þeirra. Til hamingju með að bæta við öðrum dropamarki getur verið einfaldara en þú heldur; vegna þess að aðgerðirnar eru nú þegar til staðar, þá þurfum við aðeins að bæta við viðburðum hlustendum, eins og svo:
Og það er allt sem við þurfum til til að leyfa að sleppa þeim frá upphafi.
Það eru fullt af forritum sem draga og sleppa, byggt með JavaScript-bókasöfnum, og það er oft einfaldara að nota þær bókasöfn. En ég vona að í þessari HTML5 og JavaScript tækni sjáum við framtíðar möguleika innfæddrar lausnar.
Hefur þú búið til að draga og sleppa tengi? Hvernig er HTML5 í samanburði við hreint JavaScript-lausnir? Láttu okkur vita í athugasemdunum.