0Pricing
HTML Academy · Aula

Objeto dataTransfer

Transfira dados entre a origem do arrasto e o destino de soltura.

Objeto dataTransfer é uma aula grátis de HTML Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de HTML Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de HTML Academy inclui 4 aulas no total.

O que dataTransfer contém

O objeto dataTransfer é associado a todo evento de arrastamento e é o único canal de comunicação entre a origem e o destino. Ele transporta dados da carga útil, listas de arquivos, efeitos permitidos e o efeito de soltura escolhido.

setData e getData

A origem grava cargas úteis tipadas com e.dataTransfer.setData(format, value). O destino as lê com e.dataTransfer.getData(format). Ambos os argumentos são cadeias de caracteres; os valores são convertidos em cadeias de caracteres antes do armazenamento.

src.addEventListener("dragstart", (e) => {
  e.dataTransfer.setData("text/plain", "hello");
  e.dataTransfer.setData("application/json", JSON.stringify({ id: 42 }));
});

Vários tipos MIME

Armazenar a mesma carga útil em vários tipos torna o arrastamento interoperável: "text/plain" funciona em qualquer editor de texto, "text/uri-list" é reconhecido pelos navegadores como uma URL e "text/html" preserva a formatação em processadores de texto. O destino escolhe o tipo que entende.

Restrições de leitura fora da soltura

Por privacidade, o navegador expõe apenas a lista de tipos — não os valores — aos manipuladores de entrada e arrastamento sobre o destino por meio de e.dataTransfer.types. Os dados reais só podem ser lidos dentro do evento de soltura de um destino que a aceite.

A lista de arquivos

Quando o usuário arrasta a partir da área de trabalho, e.dataTransfer.files é um FileList de objetos de arquivo. Ela fica vazia para arrastamentos originados dentro da página. Trate-a como a forma oficial de detectar uma soltura externa de arquivos e acessar tamanho, nome e tipo.

Coleção de itens

e.dataTransfer.items expõe tanto cadeias de caracteres quanto arquivos como objetos DataTransferItem. Cada item tem kind ("string" ou "file"), type (MIME) e getAsString(cb) / getAsFile(). items é a alternativa moderna e ciente dos tipos para 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 versus dropEffect

effectAllowed é definido pela origem no início do arrastamento e lista as operações compatíveis com a origem. dropEffect é definido pelo destino durante o arrastamento sobre o destino e escolhe uma dessas operações. O navegador cancela a soltura se os dois valores forem incompatíveis.

Imagem de arrastamento personalizada

e.dataTransfer.setDragImage(node, x, y) substitui a imagem fantasma padrão. Passe um elemento DOM fora da tela, estilizado conforme desejar, além do deslocamento do cursor em relação a esse elemento. A alteração se aplica apenas ao arrastamento atual.

clearData

e.dataTransfer.clearData() apaga todos os formatos; clearData("text/plain") remove um único formato. Raramente é necessário, pois dataTransfer é criado novamente a cada arrastamento, mas é útil quando você começa a preencher dados e depois decide cancelar.

Comportamento entre origens

Arquivos arrastados de uma página na origem A para uma página na origem B ainda são entregues — a API funciona entre origens. No entanto, a página receptora vê apenas o que a origem colocou explicitamente em dataTransfer; não é concedido acesso arbitrário ao DOM.

Arrastando do navegador para a área de trabalho

Ao gravar o tipo "DownloadURL" (setData("DownloadURL", "image/png:filename.png:https://...")), uma página pode permitir que o usuário arraste um arquivo para fora do navegador, até a área de trabalho. O suporte é limitado (navegadores baseados em Chromium), portanto detecte a situação e ofereça uma alternativa adequada.

Verificação de conhecimento

Por que dataTransfer.getData() não pode retornar o valor realmente armazenado durante o evento de arrasto sobre o alvo?

Resumo

dataTransfer é a ponte entre a origem do arrasto e o alvo da soltura. Utilize setData/getData para cargas úteis de cadeias de caracteres tipadas, itens para uma visão unificada de arquivos e cadeias de caracteres, arquivos para solturas do computador, setDragImage para pré-visualizações personalizadas e effectAllowed/dropEffect para negociar a operação.

Perguntas Frequentes

A aula “Objeto dataTransfer” é grátis?

Sim — o texto completo de “Objeto dataTransfer” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de HTML Academy, atualize para CoddyKit PRO. O curso de HTML Academy inclui 4 aulas no total.

O que vou aprender em “Objeto dataTransfer”?

Transfira dados entre a origem do arrasto e o destino de soltura. Você pratica HTML Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar HTML Academy?

Nenhuma experiência prévia é necessária. HTML Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “Objeto dataTransfer”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de HTML Academy?

Sim. Cada aula de HTML Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Atributo draggable e evento dragstart
  2. Eventos dragover e drop
  3. Objeto dataTransfer
  4. Lista prática com reordenação por arrastar
← Voltar para HTML Academy