Objeto dataTransfer
Transfiera datos entre el origen y el destino del arrastre
Objeto dataTransfer es una lección gratuita de HTML Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de HTML Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de HTML Academy incluye 4 lecciones en total.
Qué contiene dataTransfer
El objeto dataTransfer está asociado a cada evento de arrastre y es el único canal de comunicación entre el elemento de origen y la zona de destino. Transporta datos de carga útil, listas de archivos, efectos permitidos y el efecto de soltar elegido.
setData y getData
El elemento de origen escribe cargas útiles tipadas con e.dataTransfer.setData(format, value). La zona de destino las lee con e.dataTransfer.getData(format). Ambos argumentos son cadenas; los valores se convierten a cadenas antes de almacenarse.
src.addEventListener("dragstart", (e) => {
e.dataTransfer.setData("text/plain", "hello");
e.dataTransfer.setData("application/json", JSON.stringify({ id: 42 }));
});Varios tipos MIME
Almacenar la misma carga útil con varios tipos hace que el arrastre sea interoperable: "text/plain" funciona en cualquier editor de texto, los navegadores reconocen "text/uri-list" como una URL y "text/html" conserva el formato en los procesadores de texto. La zona de destino elige el tipo que entiende.
Restricciones de lectura fuera de drop
Por motivos de privacidad, el navegador expone únicamente la lista de tipos —no los valores— a los controladores de dragenter y dragover mediante e.dataTransfer.types. Los datos reales solo se pueden leer dentro del evento drop de una zona de destino que acepte la operación.
La lista files
Cuando el usuario arrastra desde el escritorio, e.dataTransfer.files es un FileList de objetos File. Está vacío en los arrastres que se originan dentro de la página. Considérelo la forma canónica de detectar una operación externa de soltar archivos y de acceder a su tamaño, nombre y tipo.
La colección items
e.dataTransfer.items expone tanto cadenas como archivos mediante objetos DataTransferItem. Cada elemento tiene kind ("string" o "file"), type (MIME) y getAsString(cb) / getAsFile(). items es la alternativa moderna y consciente del tipo frente a 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 frente a dropEffect
effectAllowed lo establece el elemento de origen en dragstart y enumera las operaciones que admite. dropEffect lo establece la zona de destino en dragover y elige una de esas operaciones. El navegador cancela la operación si ambos valores no coinciden.
Imagen de arrastre personalizada
e.dataTransfer.setDragImage(node, x, y) sustituye la imagen fantasma predeterminada. Pase un elemento DOM fuera de la pantalla, con los estilos que prefiera, junto con el desplazamiento del cursor respecto a ese elemento. El cambio se aplica únicamente al arrastre actual.
clearData
e.dataTransfer.clearData() elimina todos los formatos; clearData("text/plain") elimina un único formato. Rara vez es necesario porque dataTransfer se crea de nuevo en cada arrastre, pero resulta útil cuando empieza a rellenar datos y después decide cancelar la operación.
Comportamiento entre orígenes
Los archivos arrastrados desde una página del origen A a una página del origen B se siguen entregando: la API funciona entre distintos orígenes. Sin embargo, la página receptora solo ve lo que el origen colocó explícitamente en dataTransfer; no se concede acceso arbitrario al DOM.
Arrastrar del navegador al escritorio
Al escribir el tipo "DownloadURL" (setData("DownloadURL", "image/png:filename.png:https://...")), una página puede permitir que el usuario arrastre un archivo fuera del navegador hasta el escritorio. La compatibilidad es limitada (navegadores basados en Chromium), así que debe detectarla y ofrecer una alternativa adecuada.
Comprobación de conocimientos
¿Por qué no se permite que dataTransfer.getData() devuelva el valor almacenado real durante el evento dragover?
Resumen
dataTransfer es el puente entre el origen del arrastre y el destino de la suelta. Use setData/getData para cargas útiles de cadenas tipadas, items para una vista unificada de archivos y cadenas, files para sueltas desde el escritorio, setDragImage para vistas previas personalizadas, y effectAllowed/dropEffect para negociar la operación.
Preguntas frecuentes
¿La lección «Objeto dataTransfer» es gratis?
Sí — el texto completo de «Objeto dataTransfer» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de HTML Academy, actualiza a CoddyKit PRO. El curso de HTML Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Objeto dataTransfer»?
Transfiera datos entre el origen y el destino del arrastre Practicas HTML Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar HTML Academy?
No se requiere experiencia previa. HTML Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «Objeto dataTransfer»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de HTML Academy?
Sí. Cada lección de HTML Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Atributo draggable y evento dragstart
- Eventos dragover y drop
- Objeto dataTransfer
- Lista práctica con reordenación mediante arrastre