JavaScript húzása
Összefoglaló: ebben az oktatóanyagban megismerheti a JavaScript drag and drop API-t.
Bevezetés JavaScript drag and drop API
A HTML5 hivatalosan bevezette a fogd és vidd specifikációt. A legtöbb modern webböngésző a HTML5 specifikáció alapján natív fogd és vidd funkciót valósított meg.
Alapértelmezés szerint csak a kép és a szöveg húzható. Kép húzásához egyszerűen tartsa lenyomva az egérgombot, majd mozgassa azt. A szöveg húzásához ki kell emelnie néhány szöveget, és ugyanúgy kell húznia, mint egy képet.
A HTML5 specifikáció megadja, hogy szinte az összes elem húzható. Az elem húzhatóvá tételéhez adja hozzá a draggable
tulajdonságot a true
értékkel a HTML-címkéjéhez. Például:
Code language: HTML, XML (xml)
Események húzható elemeken
Egy elem húzásakor ezek az események a következő sorrendben aktiválódnak:
-
dragstart
-
drag
-
dragend
Ha lenyomva tartja az egér gombját, és mozgatni kezdi az egeret, a dragstart
esemény elindul a húzható elemen hogy húzod. A kurzor cseppentés nélküli szimbólummá (körvé, rajta egy vonallal) változik, jelezve, hogy nem dobhatja el az elemet önmagára.
A dragstart
után esemény bekapcsol, a drag
esemény többször is aktiválódik, amíg az elemet húzza.
És a dragend
esemény elindul amikor abbahagyja az elem húzását.
Az összes esemény (e.target
) célja az elem, amelyet húzunk.
Alapértelmezés szerint , a böngésző nem változtatja meg a húzott elem megjelenését. Ezért testreszabhatja a megjelenését a beállításai alapján.
Események a célpontokon
Amikor egy elemet egy érvényes drop célpont fölé húz, ezek az események a következő sorrendben aktiválódnak:
-
dragenter
-
dragover
-
dragleave
vagydrop
A dragenter
esemény amint elindul amikor az elemet áthúzza egy csepp célpont fölé.
A dragenter
esemény elindulása után a dragover
esemény ismételten elindul. mindaddig, amíg az elemet a dobási cél határán belül húzza.
Amikor az elemet a dobási cél határain kívülre húzza, a dragover
esemény leáll, és a dragleave
esemény elindul.
Ha az elemet a célra dobja, akkor az drop
esemény elindul a dragleave
esemény helyett.
A cél (dragenter
, dragover
, dragleave
és az drop
események a csepp cél elemei.
Érvényes csepp cél
Szinte minden elem támogatja a csepp cél eseményeket (dragenter
, dragover
, dragleave
és drop
). Alapértelmezés szerint azonban nem engedélyezik az ejtést.
Ha olyan elemet dob le egy célpontra, amely nem engedi eldobni, az drop
esemény nyert ne induljon el.
Ha egy elemet érvényes esési célzattá szeretne alakítani, felülírhatja a dragenter
és a dragover
eseményeket a event.preventDefault()
módszer meghívásával a megfelelő eseménykezelőkben. (További információkért lásd a példa szakaszt.)
Adatok átvitele dataTransfer objektum használatával
Adatok áthelyezéséhez húzás művelettel használja a objektum.
A dataTransfer
objektum az esemény tulajdonsága. Lehetővé teszi az adatok átvitelét a húzott elemről a drop célpontra.
A dataTransfer
objektumnak két módja van: setData()
és getData()
.
A setData()
segítségével beállíthatja a húzási művelet adatait a megadott formátumra és adatokra :
Code language: CSS (css)
A formátum lehet text/plain
vagy text/uri-list
. Az adatok lehetnek karakterláncok is, amelyek az áthúzási objektumhoz hozzáadandó adatokat reprezentálják.
A getData()
módszer lekéri a módszer.
A getData()
egyetlen argumentumot elfogad:
A formátum lehet text/plain
vagy text/uri-list
. A getData()
a setData()
módszerrel tárolt karakterláncot vagy egy üres karakterláncot ad vissza, ha a húzási művelet nem tartalmaz adatokat.
JavaScript drag and drop példa
A következő egyszerű fogd és vidd alkalmazást fejlesztjük ki a JavaScript drag and drop API bemutatására:
Hozza létre a projekt felépítése
Először hozzon létre egy új mappát drag-n-drop-basics
néven. Ebben a mappában hozzon létre két almappát css
és js
néven.
Másodszor hozzon létre egy új fájlt app.js
a js
mappában, style.css
a css
mappa, és index.html
a drag-n-drop-basics
mappában.
Harmadszor helyezze el a style.css
és szkriptcímke, amely a app.js
linkre hivatkozik a index.html
fájlban:
Készítse el az index.html fájlt
Helyezze a következő kódot a index.html
fájlba:
Ebben az index.html fájlban a .container
elemet használtuk a címsor és a drop-targets
elem igazításához.
A drop-target elem belsejében három div
elemet helyezett el ugyanolyan osztályú box
. És egy másik div elemet a item
osztályba helyezünk az első mezőbe.
Ha megnyitja a index.html
és próbálja meg húzni a sárga négyzetet, látni fogja a kurzort, amely jelzi, hogy nem lehet húzni:
Az elem húzhatóvá tételéhez adja hozzá a draggable
tulajdonságot a true
értékkel a HTML-címkéjére az alábbiak szerint:
Code language: JavaScript (javascript)
Ha elmenti a index.html
fájlt, nyissa meg a böngészőben ismét látni fogja, hogy az elem elemét így húzhatja:
Kezelje az eseményeket a húzható elemen
A style.css
fájl .hide
osztály, amely elrejt egy elemet:
Code language: CSS (css)
A app.js
fájlban a következő kódot adja hozzá:
Hogyan működik:
- Először válassza ki a húzható elemet a
querySelector()
segítségével. - Másodszor csatoljon egy
dragstart
eseménykezelő a húzható elemhez. - Harmadszor adja meg a
dragStart()
függvényt adragstart
esemény.
Ha megnyitja az index.html fájlt és elkezdi húzni a húzható elemet, a drag starts...
üzenet jelenik meg a konzolt.
A dragStart
eseménykezelőben tárolnia kell a húzható elem id
-t. És el kell rejtenie:
Ha húzza az elemet, látni fogja, hogy eltűnik, ha elkezdte húzni.
Ennek megoldásához használja a setTimeout()
függvény:
Mostantól kihúzhatja a húzható elemet az eredeti helyzetéből:
Események kezelése ejtési célokon
A style.css fájlnak van egy CSS osztálya is, amelynek neve: div div = “e61dc711bf”> , amely szaggatottá és pirosra változtatja a célpont szegélystílusát:
Code language: CSS (css)
Az app.js-ben szükséged van a drop elemek kiválasztásához és a dragenter
, dragover
, dragleave
és drop
ezeknek az eseményeknek az eseményei:
Meg kell változni a drop target célstílusának stílusát, amikor a dragenter
és dragover
esemény történik. Vissza kell állítania a stílust, amikor a dragleave
és drop
esemény bekövetkezik.
Ehhez hozzáad és eltávolít a drag-over
osztályt a drop
célhoz hasonlóan:
Most, ha a húzható elemet egy másik cseppre húzza cél, látni fogja, hogy a dobási cél határa a következő képen látható módon változik:
A leadási cél érvényességéhez a event.preventDefault()
hívást kell megadni a dragenter
és dragover
eseménykezelők, mint ez:
Ha ezt nem teszi meg, akkor a drop
esemény soha nem fog tűz, mert a div
elem alapértelmezés szerint nem érvényes drop target.
Ha a húzható elemet egy drop célpontra húzza, akkor látni fogja, hogy a kurzor az elem elvetését jelző változtatások:
Most, ha eldobja az elem elemet, látni fogja, hogy azonnal eltűnik.
Ennek megoldására kérdés, hozzá kell adnia az drop
esemény kezelését.
- Először kapja meg a húzható elem
id
-ét agetData()
módszerrel adataTransfer
objektum. - Másodszor csatolja a húzható elemet a drop drop elem gyermekelemeként.
- Harmadszor távolítsa el a
hide
osztály adraggable
elemből.
A következő kód a teljes drop
eseménykezelő:
Ha most áthúzza a húzható elemet, akkor a várt módon kell működnie.
Az alábbiakban bemutatjuk a teljes app.js fájlt:
És itt van a bemutató link.
Összegzés
- Adja hozzá a
draggable
tulajdonságot az true értékkel elemre, hogy az húzható legyen. - A
dragstart
,drag
ésdragend
események elindulnak a húzható elemen. - A
dragenter
,dragover
, vagydrop
események tüzelnek a csepp célpontra. - Hívja a
event.preventDefault()
dragenter
ésdragover
eseménykezelőkkel egy elem érvényes cseppcélzattá válhat. - Használja a
event.dataTransfer
objektum asetData()
ésgetData()
módszerrel az adatok áthelyezéséhez a fogd és vidd műveletben.
- Hasznos volt ez az oktatóanyag?
- IgenNem