L'API HTML5 Drag and Drop fournit un moyen puissant et relativement simple d'implémenter les fonctionnalités de glisser-déposer dans les applications Web. Il exploite une série d'événements déclenchés tout au long du processus de glisser-déposer. Voici une ventilation des étapes essentielles:
draggable
de l'élément HTML sur true
. Par exemple: <div id="myElement" draggable="true">Drag me!</div>
. Notez que tous les éléments ne sont pas dragables par défaut (par exemple, <input>
, <textarea></textarea>
).Gestion des événements de traînée: les événements de noyau impliqués sont:
dragstart
: tiré lorsque l'opération de glisser commence sur l'élément draggable. C'est là que vous définissez généralement les données à transférer à l'aide de event.dataTransfer.setData()
. Vous pouvez également définir une image de glisser personnalisée à l'aide de event.dataTransfer.setDragImage()
.drag
: tiré à plusieurs reprises pendant que l'élément est traîné. Ceci est souvent utilisé pour les mises à jour visuelles ou les commentaires.dragend
: tiré lorsque l'opération de traînée se termine (avec succès ou sans succès). C'est un bon endroit pour le nettoyage.Gestion des événements de dépôt: l'élément cible (où vous souhaitez supprimer l'élément glisser) doit gérer ces événements:
dragover
: tiré à plusieurs reprises tandis que l'élément draggable est sur la cible de dépôt. Surtout, vous devez appeler event.preventDefault()
dans le gestionnaire dragover
pour permettre à la goutte de se produire. Sinon, la goutte sera empêchée par défaut.drop
: tiré lorsque l'élément draggable est déposé sur la cible de dépôt. C'est là que vous récupérez les données transférées à l'aide de event.dataTransfer.getData()
et effectuez les actions nécessaires (par exemple, déplacer l'élément, mettre à jour le DOM).event.dataTransfer
est au cœur du transfert de données. setData()
prend un type mime (par exemple, "texte / plaine", "texte / html", "application / json") et les données comme arguments. getData()
récupère les données en fonction du type MIME.Voici un exemple simple:
<code class="html"><div id="draggable" draggable="true">Drag me</div> <div id="droppable">Drop here</div> <script> const draggable = document.getElementById('draggable'); const droppable = document.getElementById('droppable'); draggable.addEventListener('dragstart', (event) => { event.dataTransfer.setData('text/plain', 'Dragged text'); }); droppable.addEventListener('dragover', (event) => { event.preventDefault(); }); droppable.addEventListener('drop', (event) => { event.preventDefault(); const data = event.dataTransfer.getData('text/plain'); droppable.innerText = data; }); </script></code>
Plusieurs problèmes communs peuvent survenir lors de la mise en œuvre de la glisser-déposer HTML5:
event.preventDefault()
dans dragover
: c'est l'erreur la plus fréquente. Sans cela, le navigateur empêchera l'opération de chute.setData()
et getData()
.Oui, vous pouvez personnaliser considérablement les commentaires visuels. Voici comment:
dragover
. Par exemple, vous pouvez modifier le curseur pour move
lorsqu'un élément est dragable sur une zone de chute.dragover
et dragleave
.event.dataTransfer.setDragImage()
dans l'événement dragstart
pour personnaliser la représentation visuelle de l'élément traîné. Cela vous permet de créer une image plus petite et plus efficace pour faire glisser, plutôt que l'élément entier lui-même. Le transfert de données est géré via l'objet event.dataTransfer
. Les méthodes clés sont:
setData(format, data)
: cette méthode définit les données à transférer. format
Spécifie le type MIME (par exemple, "Text / Plain", "Text / HTML", "Application / JSON"), et data
sont les données réelles. Vous pouvez définir plusieurs types de données si nécessaire.getData(format)
: Cela récupère les données associées au type MIME spécifié. Si les données de ce type ne sont pas trouvées, elle renvoie une chaîne vide. Le choix du type MIME est important. Pour un texte simple, "Texte / Plain" est suffisant. Pour des données plus complexes, envisagez "Application / JSON" pour les données structurées ou "Text / HTML" pour transférer des fragments HTML. Assurez-vous toujours que les appels setData()
et getData()
utilisent le même type MIME.
Exemple utilisant JSON:
<code class="javascript">// In dragstart: event.dataTransfer.setData('application/json', JSON.stringify({id: 123, name: 'My Item'})); // In drop: const data = JSON.parse(event.dataTransfer.getData('application/json')); console.log(data.id, data.name);</code>
N'oubliez pas de gérer les erreurs potentielles, comme lorsque getData()
renvoie une chaîne vide, indiquant que le type de données demandé n'a pas été transféré. Une gestion des erreurs robuste rend votre implémentation de glisser-déposer plus fiable.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!