Objet `dataTransfer`
Transférez des données entre la source et la cible du glissement.
Objet `dataTransfer` est une leçon HTML Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage HTML Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours HTML Academy comprend 4 leçons au total.
Ce que contient dataTransfer
L’objet dataTransfer est associé à chaque événement de glissement et constitue l’unique canal de communication entre la source et la cible. Il transporte les charges utiles, les listes de fichiers, les effets autorisés et l’effet de dépôt choisi.
setData et getData
La source écrit des charges utiles typées avec e.dataTransfer.setData(format, value). La cible les lit avec e.dataTransfer.getData(format). Les deux arguments sont des chaînes les valeurs sont converties en chaînes avant leur stockage.
src.addEventListener("dragstart", (e) => {
e.dataTransfer.setData("text/plain", "hello");
e.dataTransfer.setData("application/json", JSON.stringify({ id: 42 }));
});Plusieurs types MIME
Stocker la même charge utile sous plusieurs types rend un glissement interopérable : « text/plain » fonctionne dans n’importe quel éditeur de texte, « text/uri-list » est reconnu par les navigateurs comme une URL et « text/html » conserve la mise en forme dans les traitements de texte. La cible choisit ce qu’elle comprend.
Restrictions de lecture en dehors de drop
Pour protéger la vie privée, le navigateur expose uniquement la liste des types — et non les valeurs — aux gestionnaires dragenter et dragover via e.dataTransfer.types. Les données réelles ne sont lisibles qu’à l’intérieur de l’événement drop d’une cible qui accepte le dépôt.
La liste files
Lorsque l’utilisateur fait glisser un élément depuis le bureau, e.dataTransfer.files est une FileList d’objets File. Elle est vide pour les glissements provenant de la page. Considérez-la comme le moyen de référence pour détecter le dépôt externe d’un fichier et accéder à sa taille, son nom et son type.
La collection items
e.dataTransfer.items expose à la fois les chaînes et les fichiers sous forme d’objets DataTransferItem. Chaque élément possède kind (« string » ou « file »), type (MIME) et getAsString(cb) / getAsFile(). items est l’alternative moderne, consciente des types, à files + getData.
for (const item of e.dataTransfer.items) {
if (item.kind === "file") {
const file = item.getAsFile();
console.log(file.name);
} else {
item.getAsString((s) => console.log(item.type, s));
}
}effectAllowed et dropEffect
effectAllowed est défini par la source dans dragstart et répertorie les opérations qu’elle prend en charge. dropEffect est défini par la cible dans dragover et choisit l’une de ces opérations. Le navigateur annule le dépôt si les deux valeurs ne correspondent pas.
Image de glissement personnalisée
e.dataTransfer.setDragImage(node, x, y) remplace l’image fantôme par défaut. Transmettez un élément DOM hors écran, stylisé selon vos besoins, ainsi que le décalage du curseur par rapport à cet élément. La modification ne s’applique qu’au glissement en cours.
clearData
e.dataTransfer.clearData() efface tous les formats ; clearData("text/plain") en supprime un seul. Cette méthode est rarement nécessaire, car dataTransfer est créé à nouveau pour chaque glissement, mais elle est utile lorsque vous commencez à renseigner des données, puis décidez d’annuler.
Comportement interorigine
Les fichiers déplacés d’une page sur l’origine A vers une page sur l’origine B sont tout de même transmis : l’API fonctionne entre les origines. Cependant, la page réceptrice ne voit que ce que la source a explicitement placé dans dataTransfer : aucun accès arbitraire au DOM ne lui est accordé.
Glisser du navigateur vers le bureau
En écrivant le type « DownloadURL » (setData("DownloadURL", "image/png:filename.png:https://...")), une page peut permettre à l’utilisateur de faire glisser un fichier hors du navigateur vers le bureau. La prise en charge est limitée (navigateurs fondés sur Chromium) : détectez cette possibilité et prévoyez une solution de repli appropriée.
Vérification des connaissances
Pourquoi dataTransfer.getData() n'est-il pas autorisé à renvoyer la valeur réellement stockée pendant l'événement dragover ?
Résumé
dataTransfer fait le lien entre la source du glissement et la cible du dépôt. Utilisez setData/getData pour des charges utiles sous forme de chaînes typées, items pour une vue unifiée des fichiers et des chaînes, files pour les dépôts depuis un ordinateur, setDragImage pour les aperçus personnalisés, et effectAllowed/dropEffect pour négocier l'opération.
Questions Fréquemment Posées
La leçon « Objet `dataTransfer` » est-elle gratuite ?
Oui — le texte complet de « Objet `dataTransfer` » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours HTML Academy, passe à CoddyKit PRO. Le cours HTML Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Objet `dataTransfer` » ?
Transférez des données entre la source et la cible du glissement. Tu pratiques HTML Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer HTML Academy ?
Aucune expérience préalable n'est requise. HTML Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.
Combien de temps prend la leçon « Objet `dataTransfer` » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon HTML Academy ?
Oui. Chaque leçon HTML Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Attribut `draggable` et événement `dragstart`
- Événements `dragover` et `drop`
- Objet `dataTransfer`
- Liste pratique réorganisable par glisser-déposer