Accueil

Traduction

Tutoriel HTML - sommaire

Tutoriel HTML5 - recherche

L'auteur : Patrick Darcheville

Vous pouvez me contacter via Facebook pour questions & suggestions : Page Facebook relative à mon site

API glisser-déposer de HTML 5

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".

Drag and drop avec jQuery UI

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.

Exemple de drag and drop avec 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).

Le code de l'exemple

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.

Utilisation de l'API glisser-déposer d'HTML 5

Désormais avec l'API "glisser-déposer" il est possible de programmer un 'drag and drop' en JS standard.

Le rendu

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.

Code CSS & HTML

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"

Evénements utilisés pour le drag and drop

Le script

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.

Drag and drop en JS standard : autre exemple

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".

Le rendu

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.

Le code CSS & HTML

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.

Le script

Il est identique à celui de l'exemple précédent.