A HTML Drag and Drop API használata

A fogd és vidd alapvető funkció, amely javítja a felhasználói interakciót és megkönnyíti a zökkenőmentes felhasználói élményt. Függetlenül attól, hogy fájlfeltöltőt, rendezhető listát vagy interaktív játékot szeretne létrehozni, ennek az API-nak a képességeinek kiaknázása elengedhetetlen készség a webfejlesztési eszköztárban.

A Drag and Drop alapjai a HTML-ben

Egy tipikus fogd és vidd rendszerben kétféle elem létezik: az első típus olyan húzható elemeket tartalmaz, amelyeket a felhasználók egérrel mozgathatnak, a második típus pedig olyan eldobható elemeket tartalmaz, amelyek jellemzően meghatározzák, hogy a felhasználók hova helyezhetnek el egy elemet.

A drag and drop megvalósításához meg kell adnia a böngészőnek, hogy mely elemeket szeretné áthúzni. Ahhoz, hogy egy elem a felhasználó által húzható legyen, az elemnek egy húzható HTML attribútumot igaz értékre kell állítani, például:

 <div draggable="true">This element is draggable</div>

Amikor a felhasználó elindít egy húzási eseményt, a böngésző egy alapértelmezett „szellem” képet ad, amely általában visszajelzést ad a húzott elemről.

Ezt a képet személyre szabhatja saját kép megadásával. Ehhez válassza ki a húzható elemet a DOM-ból, hozzon létre egy új képet az egyéni visszacsatolási kép megjelenítéséhez, és adjon hozzá egy dragstart drag eseményfigyelőt a következő módon:

 let img = new Image();
img.src="https://upload.wikimedia.org/wikipedia/commons/thumb/9/90/Twemoji_1f600.svg/220px-Twemoji_1f600.svg.png";

document.querySelector('div').addEventListener('dragstart', (event)=>{
    event.dataTransfer.setDragImage(img, 10, 10);
})

A fenti kódblokkban a setDragImage metódusnak három paramétere van. Az első paraméter a képre hivatkozik. A többi paraméter a kép vízszintes és függőleges eltolásait jelenti. Amikor futtatja a kódot a böngészőben, és elkezd húzni egy elemet, észre fogja venni, hogy az egyéni húzóképet a korábban beállított egyéni képre cserélték.

  Hogyan lehet a Twitter szív ikonját bármilyen hangulatjelre megváltoztatni

Ha engedélyezni szeretné a leejtést, meg kell akadályoznia az alapértelmezett viselkedést a dragenter és a dragover események törlésével, például:

 const dropElement = document.querySelector("drop-target");

dropElement.addEventListener("dragenter", (ev) => {
  ev.preventDefault();
});

dropElement.addEventListener("dragover", (ev) => {
  ev.preventDefault();
});

A DragEvent felület megértése

A JavaScript tartalmaz egy DragEvent felületet, amely a felhasználó fogd és vidd interakcióját képviseli. Az alábbiakban a lehetséges eseménytípusok listája található a DragEvent felület alatt.

  • drag: A felhasználó egy elem húzása közben aktiválja ezt az eseményt.
  • dragend: Ez az esemény akkor aktiválódik, amikor a húzási művelet véget ér, vagy amikor a felhasználó megszakítja azt. Egy tipikus húzási művelet befejezhető az egérgomb felengedésével vagy az Escape billentyű lenyomásával.
  • dragenter: A húzott elem akkor váltja ki ezt az eseményt, amikor érvényes leejtési célt ad meg.
  • dragleave: Amikor a húzott elem elhagyja a célpontot, ez az esemény aktiválódik.
  • dragover: Amikor a felhasználó egy húzható elemet húz egy célpont fölé, az esemény aktiválódik.
  • dragstart: Az esemény a húzási művelet kezdetekor indul el.
  • drop: A felhasználó akkor váltja ki ezt az eseményt, amikor egy elemet ledob egy célpontra.

Ha egy fájlt a böngészőn kívüli környezetből (például az operációs rendszer fájlkezelőjéből) húz a böngészőbe, a böngésző nem indítja el a dragstart vagy dragend eseményeket.

A DragEvent hasznos lehet, ha egyéni húzási eseményt szeretne programozottan elküldeni. Ha például azt szeretné, hogy egy div egyéni húzási eseményeket aktiváljon az oldalbetöltéskor, akkor ezt a következőképpen teheti meg. Először hozzon létre egy új egyéni DragEvent()-et, például:

 const customDragStartEvent = new DragEvent('dragstart', {
    dataTransfer: new DataTransfer(),
})

const customDragEndEvent = new DragEvent('dragend');

A fenti kódblokkban a customDragStartEvent a DragEvent() egy példányát képviseli. A customDragStartEventben két konstruktor argumentum van. Az első a drag eseménytípust jelenti, amely a korábban említett hét eseménytípus egyike lehet.

  A Scrum szerepei a szoftverfejlesztésben világos és egyszerű kifejezésekkel magyarázva

A második argumentum egy adatátviteli kulccsal rendelkező objektum, amely a DataTransfer egy példányát képviseli, amelyről az útmutató későbbi részében többet is megtudhat. Ezután fogja meg a dokumentumobjektum-modellből (DOM) azt az elemet, amelyből az eseményt ki szeretné indítani.

 const draggableElement = document.querySelector("#draggable");

Ezután adjuk hozzá, hogy az eseményfigyelők így működjenek:

   draggableElement.addEventListener('dragstart', (event) => {
    console.log('Drag started!');
    event.dataTransfer.setData('text/plain', 'Hello, world!');
  });

  draggableElement.addEventListener('dragend', () => {
    console.log('Drag ended!');
  });

A fenti első eseményfigyelőben a visszahívási funkció naplózza a „Húzás megkezdve!” szöveget. és meghívja a setData metódust az eseményobjektum dataTransfer tulajdonságán. Most az alábbi módon indíthatja el az egyéni eseményeket:

 draggableElement.dispatchEvent(customDragStartEvent);
draggableElement.dispatchEvent(customDragEndEvent);

Adatátvitel a dataTransfer segítségével

A dataTransfer objektum hídként szolgál a forráselem (a húzható elem) és a célelem (az eldobható terület) között a fogd és vidd művelet során. Ideiglenes tárolótárolóként működik azon adatok számára, amelyeket meg szeretne osztani ezen elemek között.

Ezek az adatok különböző formájúak lehetnek, például szöveges, URL-címek vagy egyéni adattípusok, így sokoldalú eszköz a fogd és vidd funkciók széles skálájának megvalósításához.

A setData() használata az adatok csomagolásához

Az adatok áthúzható elemről eldobható elemre való átviteléhez a dataTransfer objektum által biztosított setData() metódust kell használni. Ez a módszer lehetővé teszi az átvinni kívánt adatok becsomagolását és az adattípus megadását. Íme egy alapvető példa:

 element.addEventListener('dragstart', (event) => {
  event.dataTransfer.setData('text/plain', 'Hello, world!');
});

Amikor a felhasználó elkezdi húzni a megadott elemet, a setData() becsomagolja a „Hello, world!” szöveget. szöveg/sima adattípussal. Ezek az adatok most a húzási eseménnyel vannak társítva, és az eldobható cél elérheti őket az eldobási művelet során.

  A Twitter marketing következő lépése

Adatok lekérése a getData() segítségével

A fogadó oldalon, egy eldobható elem eseményfigyelőjében, a getData() metódussal kérheti le az átvitt adatokat:

 element.addEventListener('drop', (event) => {
  const transferredData = event.dataTransfer.getData('text/plain');
  console.log(`Received data: ${transferredData}`);
});

A fenti kódblokk ugyanazzal az adattípussal (szöveg/sima) kéri le az adatokat, amelyeket korábban a setData() metódussal állítottak be. Ez lehetővé teszi az átvitt adatok elérését és kezelését az eldobható elem környezetében.

Használja a Drag and Drop interfészek eseteit

A fogd és vidd funkciók webalkalmazásaiba való integrálása jelentős fejlesztés lehet, de elengedhetetlen annak megértése, hogy mikor és miért érdemes megvalósítani.

  • Fájlfeltöltők: Leegyszerűsíti a feltöltési folyamatot, ha lehetővé teszi a felhasználók számára, hogy a fájlokat közvetlenül az asztalukról vagy a fájlkezelőjükről egy kijelölt területre húzzák.
  • Rendezhető listák: Ha az alkalmazás elemlistákat, például feladatlistákat, lejátszási listákat vagy képgalériákat tartalmaz, a felhasználók értékelhetik az elemek átrendezésének lehetőségét a fogd és vidd módszerrel.
  • Interaktív irányítópultok: Az adatok megjelenítéséhez és jelentéskészítő eszközeihez a fogd és vidd hatékony módja lehet a felhasználóknak az irányítópultok testreszabására a widgetek és diagramok átrendezésével.

A kisegítő lehetőségek szem előtt tartása

Bár a drag and drop vizuálisan tetszetős lehet, és javítja a felhasználói élményt, kulcsfontosságú annak biztosítása, hogy a megvalósítás minden felhasználó számára elérhető maradjon, beleértve a fogyatékkal élőket is. Biztosítson alternatív interakciós módszereket, például billentyűzetvezérlőket, hogy az alkalmazást átfogóvá tegye.