Vous pouvez me contacter via Facebook pour questions & suggestions : Page Facebook relative à mon site
Un "drag and drop" consiste à déplacer un élément d'une zone source vers une zone destination.
HTML 5 propose désormais une API "glisser-déposer".
Pendant longtemps la seule solution pour programmer un "drag and drop" était d'utiliser le célèbre framework jQuery et plus précisément l'extension jQuery-UI.
Ci-dessous un document HTML avec des images déplaçables :
Vous pouvez déplacer les images de la boite du haut vers la boite du bas (fond rose).
Partie HEAD : il faut charger deux fichiers JS (celui de la librairie jQuery et celui de l'extension jQuery UI).
Par contre dans le cadre d'un "glisser-déposer" il n'est pas nécessaire de charger la feuille de style de la librairie jQuery UI.
CSS : Les images sont des éléments inline-block (boites disposées côte à côte).
HTML : insertion de quatre images et création d'une grande boite avec un fond rose.
La première méthode rend "glissable" les éléments référencés (donc ici les images).
La deuxième méthode rend "déposable" les éléments référencés (donc ici une seule boîte: le DIV unique).
Donc on pourra faire glisser les images pour les déposer dans la boîte DIV.
Désormais avec l'API "glisser-déposer" il est possible de programmer un 'drag and drop' en JS standard.
Ci-dessous un document HTML avec des images déplaçables :
Vous pouvez déplacer les images de la boite de gauche vers la boite de droite.
Pour les images (balises IMG) et les liens hypertexte ( balises A), l'attribut "draggable ='true' " est facultatif.
On appelle la fonction "glisser(event)" sur chaque élément déplaçables et pour l'évènement "ondragstart"
La fonction survoler() sur "ondragover" pour la zone de destination, ne contient qu'une instruction : "event.preventDefault()".
Je rappelle que cette instruction JS annule le comportement par défaut.
Il est impératif de désactiver pour l'événement ondragover le comportement par défaut des navigateurs qui réfusent tout dépôt.
Pour transférer les données d'une zone source vers une zone destination il faut utiliser l'objet dataTransfer.
Cet objet comprend deux méthodes setData() & getData().
La methode setData() permet de mémoriser les données à déposer. Elle comprend deux paramètres : le premier est "text" et le deuxième précise
le type de donnée à déposer
La méthode getDate() permet de récupérer les données mémorisées par la méthode précédente. getData() ne comprend qu'un argument : "text".
La fonction glisser() sur chaque élément déplaçable, permet de mémoriser dans l'exemple, l'ID de l'élement déplacé.
La fonction deposer() sur l'évènement "ondrop" pour la zone de destination permet de récupérer l'ID de l'élément déplacé et de créer un élément dans la zone de destination.
Dans ce deuxième exemple on rend déplaçables des images mais aussi une liste à puces.
De plus le curseur doit changer d'aspect dès le début du "drag".
Ci-dessous un document HTML avec des éléments de différentes nature déplaçables.
Dès qu'un élément déplaçable est pointé, le curseur change d'aspect : une croix de flèches doubles.
Notez la règle de style : [draggable =true] {cursor : move; }
Cette règle modififie l'apparence du curseur lorqu'il pointe un élément "draggable".
Il faut donc rajouter l'attribut draggable ="true" à tous les éléments déplaçables y compris les images et les liens hypertextes.
Il est identique à celui de l'exemple précédent.