<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Arquivos datatransfer javascript - Web-Zoneware</title>
	<atom:link href="https://webzoneware.com/tag/datatransfer-javascript/feed/" rel="self" type="application/rss+xml" />
	<link>https://webzoneware.com/tag/datatransfer-javascript/</link>
	<description>Mais do que apenas uma academia web.</description>
	<lastBuildDate>Wed, 21 Oct 2026 03:48:03 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://webzoneware.com/wp-content/uploads/icon-webzoneware-150x150.png</url>
	<title>Arquivos datatransfer javascript - Web-Zoneware</title>
	<link>https://webzoneware.com/tag/datatransfer-javascript/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>HTML5 Drag and Drop API: Guia Prático &#124; Web Academy</title>
		<link>https://webzoneware.com/web-academy/curso-html/drag-and-drop-api-html5/</link>
					<comments>https://webzoneware.com/web-academy/curso-html/drag-and-drop-api-html5/#respond</comments>
		
		<dc:creator><![CDATA[Web-Zoneware]]></dc:creator>
		<pubDate>Wed, 21 Oct 2026 03:45:22 +0000</pubDate>
				<category><![CDATA[Curso de HTML & HTML5]]></category>
		<category><![CDATA[arrastar e soltar html5]]></category>
		<category><![CDATA[atributo draggable]]></category>
		<category><![CDATA[datatransfer javascript]]></category>
		<category><![CDATA[drag and drop api]]></category>
		<category><![CDATA[html5 drag and drop]]></category>
		<guid isPermaLink="false">https://webzoneware.com/?p=29336</guid>

					<description><![CDATA[<p>A HTML5 Drag and Drop API é a especificação nativa que permite aos desenvolvedores construir interfaces ricas e interativas onde o usuário pode clicar em elementos, arrastá-los pela tela com o cursor e soltá-los em recipientes designados — ou até mesmo arrastar arquivos diretamente da área de trabalho do computador para dentro do navegador. Essa [&#8230;]</p>
<p>O post <a href="https://webzoneware.com/web-academy/curso-html/drag-and-drop-api-html5/">HTML5 Drag and Drop API: Guia Prático | Web Academy</a> apareceu primeiro em <a href="https://webzoneware.com">Web-Zoneware</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="wzw-lesson-lead">
    A <strong>HTML5 Drag and Drop API</strong> é a especificação nativa que permite aos desenvolvedores construir interfaces ricas e interativas onde o usuário pode clicar em elementos, arrastá-los pela tela com o cursor e soltá-los em recipientes designados — ou até mesmo arrastar arquivos diretamente da área de trabalho do computador para dentro do navegador. Essa API eliminou a dependência histórica de bibliotecas pesadas de JavaScript para gerenciar coordenadas e eventos manuais de mouse.
</p>
<h2>1. Como Funciona a Mecânica Nativa de Arrastar e Soltar</h2>
<p>
    Por padrão nos navegadores, apenas dois elementos podem ser arrastados nativamente: links (<code>&lt;a href="..."&gt;</code>) e imagens (<code>&lt;img&gt;</code>). Para que qualquer outro elemento HTML comum (como um <code>&lt;div&gt;</code>, <code>&lt;li&gt;</code> ou <code>&lt;article&gt;</code>) se torne arrastável, é obrigatório declarar o atributo booleano:
</p>
    <div class="wzw-ide-card" id="wzw-code-83444" data-lang="html">
        <div class="wzw-ide-header">
            <div class="wzw-ide-dots" aria-hidden="true">
                <span class="wzw-dot wzw-dot-red"></span>
                <span class="wzw-dot wzw-dot-amber"></span>
                <span class="wzw-dot wzw-dot-green"></span>
            </div>
            <div class="wzw-ide-meta">
                <span class="wzw-ide-lang-badge">HTML5</span>
                                <span class="wzw-ide-lines-count">4 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-83444', this)" title="Alternar quebra automática de linhas">
                    ⇄ Wrap
                </button>
                <button type="button" class="wzw-ide-btn wzw-ide-copy-btn" onclick="wzwCopyCodeBlock('wzw-code-83444', this)" aria-label="Copiar código para a área de transferência">
                    📋 <span class="wzw-copy-text">Copiar Código</span>
                </button>
            </div>
        </div>
        <div class="wzw-ide-body">
            <pre class="wzw-ide-pre" tabindex="0"><code class="wzw-ide-code"><span class="wzw-code-line"><span class="wzw-tk-comment">&lt;!-- Ativando o comportamento arrastável --&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;cartao-tarefa&quot;</span> <span class="wzw-tk-attr">draggable</span>=<span class="wzw-tk-str">&quot;true&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">    Refatorar Folha de Estilos</span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;/div&gt;</span></span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>&lt;!-- Ativando o comportamento arrastável --&gt;
&lt;div class=&quot;cartao-tarefa&quot; draggable=&quot;true&quot;&gt;
    Refatorar Folha de Estilos
&lt;/div&gt;</textarea>
        </div>
    </div>
    
<h2>2. O Ciclo de Vida dos Eventos de Drag &#038; Drop</h2>
<p>
    O fluxo de arrastar e soltar é governado por eventos disparados em dois atores diferentes: o <strong>elemento de origem</strong> (o item que se move) e a <strong>zona de destino</strong> (o container que recebe o item):
</p>
<div class="wzw-table-responsive">
<table class="wzw-tech-table">
<thead>
<tr>
<th>Ator</th>
<th>Evento</th>
<th>Quando é Disparado?</th>
</tr>
</thead>
<tbody>
<tr>
<td rowspan="3"><strong>Origem</strong> (Item arrastado)</td>
<td><code>dragstart</code></td>
<td>No exato instante em que o usuário inicia o arrasto do elemento.</td>
</tr>
<tr>
<td><code>drag</code></td>
<td>Disparado continuamente enquanto o elemento está sendo movido pelo cursor.</td>
</tr>
<tr>
<td><code>dragend</code></td>
<td>Quando o usuário solta o botão do mouse, finalizando o arrasto (com sucesso ou cancelado).</td>
</tr>
<tr>
<td rowspan="4"><strong>Destino</strong> (Zona de Drop)</td>
<td><code>dragenter</code></td>
<td>Quando o item arrastado cruza a borda e entra no espaço visual da zona de soltura.</td>
</tr>
<tr>
<td><code>dragover</code></td>
<td>Disparado a cada milissegundo enquanto o item paira sobre a zona. <strong>Obrigatório chamar <code>e.preventDefault()</code> para autorizar a soltura!</strong></td>
</tr>
<tr>
<td><code>dragleave</code></td>
<td>Quando o cursor com o item sai da área da zona sem ter sido solto.</td>
</tr>
<tr>
<td><code>drop</code></td>
<td>Quando o botão do mouse é liberado sobre a zona de soltura válida.</td>
</tr>
</tbody>
</table>
</div>
<div class="wzw-pro-tip">
<h4>💡 A Regra de Ouro do Evento dragover</h4>
<p>
        Por segurança e padrão da especificação web, o navegador <strong>proíbe</strong> que dados sejam soltos em qualquer elemento comum da página. Se você não interceptar o evento <code>dragover</code> chamando <code>event.preventDefault()</code>, o evento <code>drop</code> <strong>nunca será disparado</strong>!
    </p>
</div>
<h2>3. O Objeto DataTransfer: A Maleta de Dados do Cursor</h2>
<p>
    Durante o ciclo de arrasto, os dados são transportados de um lado para o outro através da propriedade <code>event.dataTransfer</code>. Seus métodos fundamentais são:
</p>
<ul>
<li><code>e.dataTransfer.setData(tipoMime, valor)</code>: Grava uma informação no buffer (ex: o ID do elemento no formato <code>'text/plain'</code>).</li>
<li><code>e.dataTransfer.getData(tipoMime)</code>: Lê a informação gravada no momento em que o item é solto na zona.</li>
<li><code>e.dataTransfer.effectAllowed</code>: Define os efeitos permitidos (ex: <code>'move'</code>, <code>'copy'</code> ou <code>'link'</code>).</li>
</ul>
<h2>4. Código Prático Completo: Painel Kanban Interativo</h2>
<p>
    Abaixo construímos um mini-quadro de produtividade com duas colunas onde você pode transferir cartões de tarefas livremente entre os estados:
</p>
    <div class="wzw-ide-card" id="wzw-code-49571" data-lang="html">
        <div class="wzw-ide-header">
            <div class="wzw-ide-dots" aria-hidden="true">
                <span class="wzw-dot wzw-dot-red"></span>
                <span class="wzw-dot wzw-dot-amber"></span>
                <span class="wzw-dot wzw-dot-green"></span>
            </div>
            <div class="wzw-ide-meta">
                <span class="wzw-ide-lang-badge">HTML5</span>
                                <span class="wzw-ide-lines-count">14 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-49571', this)" title="Alternar quebra automática de linhas">
                    ⇄ Wrap
                </button>
                <button type="button" class="wzw-ide-btn wzw-ide-copy-btn" onclick="wzwCopyCodeBlock('wzw-code-49571', this)" aria-label="Copiar código para a área de transferência">
                    📋 <span class="wzw-copy-text">Copiar Código</span>
                </button>
            </div>
        </div>
        <div class="wzw-ide-body">
            <pre class="wzw-ide-pre" tabindex="0"><code class="wzw-ide-code"><span class="wzw-code-line"><span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;kanban-board&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-comment">&lt;!-- Coluna 1: A Fazer --&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;kanban-column&quot;</span> <span class="wzw-tk-attr">id</span>=<span class="wzw-tk-str">&quot;coluna-pendente&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;h3&gt;</span>📋 A Fazer<span class="wzw-tk-tag">&lt;/h3&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;kanban-item&quot;</span> <span class="wzw-tk-attr">id</span>=<span class="wzw-tk-str">&quot;item-1&quot;</span> <span class="wzw-tk-attr">draggable</span>=<span class="wzw-tk-str">&quot;true&quot;</span><span class="wzw-tk-tag">&gt;</span>Configurar Meta Tags SEO<span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;kanban-item&quot;</span> <span class="wzw-tk-attr">id</span>=<span class="wzw-tk-str">&quot;item-2&quot;</span> <span class="wzw-tk-attr">draggable</span>=<span class="wzw-tk-str">&quot;true&quot;</span><span class="wzw-tk-tag">&gt;</span>Criar Paleta de Cores HSL<span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">    <span class="wzw-tk-comment">&lt;!-- Coluna 2: Concluído --&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;kanban-column&quot;</span> <span class="wzw-tk-attr">id</span>=<span class="wzw-tk-str">&quot;coluna-concluido&quot;</span><span class="wzw-tk-tag">&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;h3&gt;</span>✅ Concluído<span class="wzw-tk-tag">&lt;/h3&gt;</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-tag">&lt;div</span> <span class="wzw-tk-attr">class</span>=<span class="wzw-tk-str">&quot;kanban-item&quot;</span> <span class="wzw-tk-attr">id</span>=<span class="wzw-tk-str">&quot;item-3&quot;</span> <span class="wzw-tk-attr">draggable</span>=<span class="wzw-tk-str">&quot;true&quot;</span><span class="wzw-tk-tag">&gt;</span>Estruturar Layout Semântico<span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-tag">&lt;/div&gt;</span></span>
<span class="wzw-code-line"><span class="wzw-tk-tag">&lt;/div&gt;</span></span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>&lt;div class=&quot;kanban-board&quot;&gt;
    &lt;!-- Coluna 1: A Fazer --&gt;
    &lt;div class=&quot;kanban-column&quot; id=&quot;coluna-pendente&quot;&gt;
        &lt;h3&gt;📋 A Fazer&lt;/h3&gt;
        &lt;div class=&quot;kanban-item&quot; id=&quot;item-1&quot; draggable=&quot;true&quot;&gt;Configurar Meta Tags SEO&lt;/div&gt;
        &lt;div class=&quot;kanban-item&quot; id=&quot;item-2&quot; draggable=&quot;true&quot;&gt;Criar Paleta de Cores HSL&lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- Coluna 2: Concluído --&gt;
    &lt;div class=&quot;kanban-column&quot; id=&quot;coluna-concluido&quot;&gt;
        &lt;h3&gt;✅ Concluído&lt;/h3&gt;
        &lt;div class=&quot;kanban-item&quot; id=&quot;item-3&quot; draggable=&quot;true&quot;&gt;Estruturar Layout Semântico&lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;</textarea>
        </div>
    </div>
    
    <div class="wzw-ide-card" id="wzw-code-41354" data-lang="css">
        <div class="wzw-ide-header">
            <div class="wzw-ide-dots" aria-hidden="true">
                <span class="wzw-dot wzw-dot-red"></span>
                <span class="wzw-dot wzw-dot-amber"></span>
                <span class="wzw-dot wzw-dot-green"></span>
            </div>
            <div class="wzw-ide-meta">
                <span class="wzw-ide-lang-badge">CSS3</span>
                                <span class="wzw-ide-lines-count">42 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-41354', this)" title="Alternar quebra automática de linhas">
                    ⇄ Wrap
                </button>
                <button type="button" class="wzw-ide-btn wzw-ide-copy-btn" onclick="wzwCopyCodeBlock('wzw-code-41354', this)" aria-label="Copiar código para a área de transferência">
                    📋 <span class="wzw-copy-text">Copiar Código</span>
                </button>
            </div>
        </div>
        <div class="wzw-ide-body">
            <pre class="wzw-ide-pre" tabindex="0"><code class="wzw-ide-code"><span class="wzw-code-line"><span class="wzw-tk-comment">/* Estilos do Quadro Kanban */</span></span>
<span class="wzw-code-line">.kanban-board {</span>
<span class="wzw-code-line">    <span class="wzw-tk-attr">display</span>: flex;</span>
<span class="wzw-code-line">    <span class="wzw-tk-attr">gap</span>: <span class="wzw-tk-num">20px</span>;</span>
<span class="wzw-code-line">    <span class="wzw-tk-attr">margin</span>: <span class="wzw-tk-num">20px</span> 0;</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">.kanban-column {</span>
<span class="wzw-code-line">    <span class="wzw-tk-attr">flex</span>: 1;</span>
<span class="wzw-code-line">    <span class="wzw-tk-attr">min-height</span>: <span class="wzw-tk-num">250px</span>;</span>
<span class="wzw-code-line">    <span class="wzw-tk-attr">padding</span>: <span class="wzw-tk-num">16px</span>;</span>
<span class="wzw-code-line">    <span class="wzw-tk-attr">background-color</span>: <span class="wzw-tk-num">#0f172a</span>;</span>
<span class="wzw-code-line">    <span class="wzw-tk-attr">border</span>: <span class="wzw-tk-num">2px</span> dashed <span class="wzw-tk-num">#334155</span>;</span>
<span class="wzw-code-line">    <span class="wzw-tk-attr">border-radius</span>: <span class="wzw-tk-num">8px</span>;</span>
<span class="wzw-code-line">    <span class="wzw-tk-attr">transition</span>: all <span class="wzw-tk-num">0.2s</span> ease;</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line"><span class="wzw-tk-comment">/* Efeito visual quando um item está sobre a coluna */</span></span>
<span class="wzw-code-line">.kanban-column.drag-over {</span>
<span class="wzw-code-line">    <span class="wzw-tk-attr">background-color</span>: <span class="wzw-tk-num">#1e293b</span>;</span>
<span class="wzw-code-line">    <span class="wzw-tk-attr">border-color</span>: <span class="wzw-tk-num">#38bdf8</span>;</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">.kanban-item {</span>
<span class="wzw-code-line">    <span class="wzw-tk-attr">padding</span>: <span class="wzw-tk-num">12px</span> <span class="wzw-tk-num">16px</span>;</span>
<span class="wzw-code-line">    <span class="wzw-tk-attr">margin-bottom</span>: <span class="wzw-tk-num">10px</span>;</span>
<span class="wzw-code-line">    <span class="wzw-tk-attr">background-color</span>: <span class="wzw-tk-num">#1e293b</span>;</span>
<span class="wzw-code-line">    <span class="wzw-tk-attr">color</span>: <span class="wzw-tk-num">#f8fafc</span>;</span>
<span class="wzw-code-line">    <span class="wzw-tk-attr">border</span>: <span class="wzw-tk-num">1px</span> solid <span class="wzw-tk-num">#475569</span>;</span>
<span class="wzw-code-line">    <span class="wzw-tk-attr">border-radius</span>: <span class="wzw-tk-num">6px</span>;</span>
<span class="wzw-code-line">    <span class="wzw-tk-attr">cursor</span>: grab;</span>
<span class="wzw-code-line">    <span class="wzw-tk-attr">transition</span>: opacity <span class="wzw-tk-num">0.2s</span>;</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">.kanban-item:active {</span>
<span class="wzw-code-line">    <span class="wzw-tk-attr">cursor</span>: grabbing;</span>
<span class="wzw-code-line">}</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line"><span class="wzw-tk-comment">/* Item fica translúcido enquanto está sendo arrastado */</span></span>
<span class="wzw-code-line">.kanban-item.is-dragging {</span>
<span class="wzw-code-line">    <span class="wzw-tk-attr">opacity</span>: 0.4;</span>
<span class="wzw-code-line">}</span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>/* Estilos do Quadro Kanban */
.kanban-board {
    display: flex;
    gap: 20px;
    margin: 20px 0;
}

.kanban-column {
    flex: 1;
    min-height: 250px;
    padding: 16px;
    background-color: #0f172a;
    border: 2px dashed #334155;
    border-radius: 8px;
    transition: all 0.2s ease;
}

/* Efeito visual quando um item está sobre a coluna */
.kanban-column.drag-over {
    background-color: #1e293b;
    border-color: #38bdf8;
}

.kanban-item {
    padding: 12px 16px;
    margin-bottom: 10px;
    background-color: #1e293b;
    color: #f8fafc;
    border: 1px solid #475569;
    border-radius: 6px;
    cursor: grab;
    transition: opacity 0.2s;
}

.kanban-item:active {
    cursor: grabbing;
}

/* Item fica translúcido enquanto está sendo arrastado */
.kanban-item.is-dragging {
    opacity: 0.4;
}</textarea>
        </div>
    </div>
    
    <div class="wzw-ide-card" id="wzw-code-27999" data-lang="javascript">
        <div class="wzw-ide-header">
            <div class="wzw-ide-dots" aria-hidden="true">
                <span class="wzw-dot wzw-dot-red"></span>
                <span class="wzw-dot wzw-dot-amber"></span>
                <span class="wzw-dot wzw-dot-green"></span>
            </div>
            <div class="wzw-ide-meta">
                <span class="wzw-ide-lang-badge">JavaScript</span>
                                <span class="wzw-ide-lines-count">42 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-27999', this)" title="Alternar quebra automática de linhas">
                    ⇄ Wrap
                </button>
                <button type="button" class="wzw-ide-btn wzw-ide-copy-btn" onclick="wzwCopyCodeBlock('wzw-code-27999', this)" aria-label="Copiar código para a área de transferência">
                    📋 <span class="wzw-copy-text">Copiar Código</span>
                </button>
            </div>
        </div>
        <div class="wzw-ide-body">
            <pre class="wzw-ide-pre" tabindex="0"><code class="wzw-ide-code"><span class="wzw-code-line"><span class="wzw-tk-comment">// JavaScript: Gerenciamento dos Eventos</span></span>
<span class="wzw-code-line"><span class="wzw-tk-kw">const</span> itens = document.<span class="wzw-tk-fn">querySelectorAll</span>(<span class="wzw-tk-str">&#039;.kanban-item&#039;</span>);</span>
<span class="wzw-code-line"><span class="wzw-tk-kw">const</span> colunas = document.<span class="wzw-tk-fn">querySelectorAll</span>(<span class="wzw-tk-str">&#039;.kanban-column&#039;</span>);</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line"><span class="wzw-tk-comment">// 1. Configura os itens que podem ser arrastados</span></span>
<span class="wzw-code-line">itens.<span class="wzw-tk-fn">forEach</span>(item =&gt; {</span>
<span class="wzw-code-line">    item.<span class="wzw-tk-fn">addEventListener</span>(<span class="wzw-tk-str">&#039;dragstart&#039;</span>, (e) =&gt; {</span>
<span class="wzw-code-line">        item.classList.<span class="wzw-tk-fn">add</span>(<span class="wzw-tk-str">&#039;is-dragging&#039;</span>);</span>
<span class="wzw-code-line">        <span class="wzw-tk-comment">// Grava o ID do elemento no dataTransfer</span></span>
<span class="wzw-code-line">        e.dataTransfer.<span class="wzw-tk-fn">setData</span>(<span class="wzw-tk-str">&#039;text/plain&#039;</span>, item.id);</span>
<span class="wzw-code-line">        e.dataTransfer.effectAllowed = <span class="wzw-tk-str">&#039;move&#039;</span>;</span>
<span class="wzw-code-line">    });</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">    item.<span class="wzw-tk-fn">addEventListener</span>(<span class="wzw-tk-str">&#039;dragend&#039;</span>, () =&gt; {</span>
<span class="wzw-code-line">        item.classList.<span class="wzw-tk-fn">remove</span>(<span class="wzw-tk-str">&#039;is-dragging&#039;</span>);</span>
<span class="wzw-code-line">    });</span>
<span class="wzw-code-line">});</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line"><span class="wzw-tk-comment">// 2. Configura as zonas de soltura (colunas)</span></span>
<span class="wzw-code-line">colunas.<span class="wzw-tk-fn">forEach</span>(coluna =&gt; {</span>
<span class="wzw-code-line">    coluna.<span class="wzw-tk-fn">addEventListener</span>(<span class="wzw-tk-str">&#039;dragover&#039;</span>, (e) =&gt; {</span>
<span class="wzw-code-line">        e.<span class="wzw-tk-fn">preventDefault</span>();<span class="wzw-tk-comment"> // OBRIGATÓRIO: autoriza o drop!</span></span>
<span class="wzw-code-line">        e.dataTransfer.dropEffect = <span class="wzw-tk-str">&#039;move&#039;</span>;</span>
<span class="wzw-code-line">        coluna.classList.<span class="wzw-tk-fn">add</span>(<span class="wzw-tk-str">&#039;drag-over&#039;</span>);</span>
<span class="wzw-code-line">    });</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">    coluna.<span class="wzw-tk-fn">addEventListener</span>(<span class="wzw-tk-str">&#039;dragleave&#039;</span>, () =&gt; {</span>
<span class="wzw-code-line">        coluna.classList.<span class="wzw-tk-fn">remove</span>(<span class="wzw-tk-str">&#039;drag-over&#039;</span>);</span>
<span class="wzw-code-line">    });</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">    coluna.<span class="wzw-tk-fn">addEventListener</span>(<span class="wzw-tk-str">&#039;drop&#039;</span>, (e) =&gt; {</span>
<span class="wzw-code-line">        e.<span class="wzw-tk-fn">preventDefault</span>();</span>
<span class="wzw-code-line">        coluna.classList.<span class="wzw-tk-fn">remove</span>(<span class="wzw-tk-str">&#039;drag-over&#039;</span>);</span>
<span class="wzw-code-line">        </span>
<span class="wzw-code-line">        <span class="wzw-tk-comment">// Recupera o ID do elemento arrastado e anexa à nova coluna</span></span>
<span class="wzw-code-line">        <span class="wzw-tk-kw">const</span> idItem = e.dataTransfer.<span class="wzw-tk-fn">getData</span>(<span class="wzw-tk-str">&#039;text/plain&#039;</span>);</span>
<span class="wzw-code-line">        <span class="wzw-tk-kw">const</span> elementoArrastado = document.<span class="wzw-tk-fn">getElementById</span>(idItem);</span>
<span class="wzw-code-line">        <span class="wzw-tk-kw">if</span> (elementoArrastado) {</span>
<span class="wzw-code-line">            coluna.<span class="wzw-tk-fn">appendChild</span>(elementoArrastado);</span>
<span class="wzw-code-line">        }</span>
<span class="wzw-code-line">    });</span>
<span class="wzw-code-line">});</span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>// JavaScript: Gerenciamento dos Eventos
const itens = document.querySelectorAll(&#039;.kanban-item&#039;);
const colunas = document.querySelectorAll(&#039;.kanban-column&#039;);

// 1. Configura os itens que podem ser arrastados
itens.forEach(item =&gt; {
    item.addEventListener(&#039;dragstart&#039;, (e) =&gt; {
        item.classList.add(&#039;is-dragging&#039;);
        // Grava o ID do elemento no dataTransfer
        e.dataTransfer.setData(&#039;text/plain&#039;, item.id);
        e.dataTransfer.effectAllowed = &#039;move&#039;;
    });

    item.addEventListener(&#039;dragend&#039;, () =&gt; {
        item.classList.remove(&#039;is-dragging&#039;);
    });
});

// 2. Configura as zonas de soltura (colunas)
colunas.forEach(coluna =&gt; {
    coluna.addEventListener(&#039;dragover&#039;, (e) =&gt; {
        e.preventDefault(); // OBRIGATÓRIO: autoriza o drop!
        e.dataTransfer.dropEffect = &#039;move&#039;;
        coluna.classList.add(&#039;drag-over&#039;);
    });

    coluna.addEventListener(&#039;dragleave&#039;, () =&gt; {
        coluna.classList.remove(&#039;drag-over&#039;);
    });

    coluna.addEventListener(&#039;drop&#039;, (e) =&gt; {
        e.preventDefault();
        coluna.classList.remove(&#039;drag-over&#039;);
        
        // Recupera o ID do elemento arrastado e anexa à nova coluna
        const idItem = e.dataTransfer.getData(&#039;text/plain&#039;);
        const elementoArrastado = document.getElementById(idItem);
        if (elementoArrastado) {
            coluna.appendChild(elementoArrastado);
        }
    });
});</textarea>
        </div>
    </div>
    
<div class="wzw-playground-action-bar">
    <span class="wzw-playground-desc">🧪 <strong>Quer testar o Kanban com Drag and Drop agora?</strong></span><br />
    <a href="https://webzoneware.com/web-academy/playground-web/" class="wzw-btn-playground" target="_blank" rel="noopener">⚡ Abrir no Playground IDE &rarr;<br />
    </a>
</div>
<h2>5. Arrastando Arquivos do Sistema Operacional para o Navegador</h2>
<p>
    A mesma API é capaz de interceptar arquivos arrastados da pasta do usuário (Windows Explorer ou Mac Finder). No evento <code>drop</code>, você acessa a lista de arquivos via <code>e.dataTransfer.files</code>:
</p>
    <div class="wzw-ide-card" id="wzw-code-21310" data-lang="javascript">
        <div class="wzw-ide-header">
            <div class="wzw-ide-dots" aria-hidden="true">
                <span class="wzw-dot wzw-dot-red"></span>
                <span class="wzw-dot wzw-dot-amber"></span>
                <span class="wzw-dot wzw-dot-green"></span>
            </div>
            <div class="wzw-ide-meta">
                <span class="wzw-ide-lang-badge">JavaScript</span>
                                <span class="wzw-ide-lines-count">10 linhas</span>
            </div>
            <div class="wzw-ide-actions">
                <button type="button" class="wzw-ide-btn wzw-ide-wrap-btn" onclick="wzwToggleCodeWrap('wzw-code-21310', this)" title="Alternar quebra automática de linhas">
                    ⇄ Wrap
                </button>
                <button type="button" class="wzw-ide-btn wzw-ide-copy-btn" onclick="wzwCopyCodeBlock('wzw-code-21310', this)" aria-label="Copiar código para a área de transferência">
                    📋 <span class="wzw-copy-text">Copiar Código</span>
                </button>
            </div>
        </div>
        <div class="wzw-ide-body">
            <pre class="wzw-ide-pre" tabindex="0"><code class="wzw-ide-code"><span class="wzw-code-line"><span class="wzw-tk-kw">const</span> dropZone = document.<span class="wzw-tk-fn">querySelector</span>(<span class="wzw-tk-str">&#039;#areaUpload&#039;</span>);</span>
<span class="wzw-code-line">&nbsp;</span>
<span class="wzw-code-line">dropZone.<span class="wzw-tk-fn">addEventListener</span>(<span class="wzw-tk-str">&#039;drop&#039;</span>, (e) =&gt; {</span>
<span class="wzw-code-line">    e.<span class="wzw-tk-fn">preventDefault</span>();</span>
<span class="wzw-code-line">    <span class="wzw-tk-kw">const</span> arquivos = e.dataTransfer.files;<span class="wzw-tk-comment"> // Coleção FileList</span></span>
<span class="wzw-code-line">    <span class="wzw-tk-kw">if</span> (arquivos.length &gt; <span class="wzw-tk-num">0</span>) {</span>
<span class="wzw-code-line">        console.<span class="wzw-tk-fn">log</span>(<span class="wzw-tk-str">`Arquivo recebido: ${arquivos[0].name} (${arquivos[0].size} bytes)`</span>);</span>
<span class="wzw-code-line">        <span class="wzw-tk-comment">// Aqui você pode enviar via FormData ou ler com FileReader!</span></span>
<span class="wzw-code-line">    }</span>
<span class="wzw-code-line">});</span>
</code></pre>
            <textarea class="wzw-ide-raw" aria-hidden="true" tabindex="-1" readonly>const dropZone = document.querySelector(&#039;#areaUpload&#039;);

dropZone.addEventListener(&#039;drop&#039;, (e) =&gt; {
    e.preventDefault();
    const arquivos = e.dataTransfer.files; // Coleção FileList
    if (arquivos.length &gt; 0) {
        console.log(`Arquivo recebido: ${arquivos[0].name} (${arquivos[0].size} bytes)`);
        // Aqui você pode enviar via FormData ou ler com FileReader!
    }
});</textarea>
        </div>
    </div>
    
<h2>6. Ferramentas Relacionadas &#038; Próximos Passos</h2>
<p>
    Explore as ferramentas do portal para manipular arquivos e gráficos com máxima produtividade:
</p>
<ul>
<li><a href="https://webzoneware.com/web-ferramentas/hub-imagens/">Hub Master de Imagens</a>: Ferramentas completas para processamento em lote de imagens via drag-and-drop.</li>
<li><a href="https://webzoneware.com/web-ferramentas/hub-pdf/">Hub Master de PDFs</a>: Ferramentas para mesclar, dividir e comprimir documentos PDF no navegador.</li>
<li><a href="https://webzoneware.com/web-ferramentas/central-dev/">Central do Desenvolvedor Web</a>: Testadores de código, manipuladores de eventos e conversores.</li>
<li><a href="https://webzoneware.com/web-academy/html/svg-inline-no-html5/">Lição 35: SVG Inline no HTML5</a>: Gráficos vetoriais de alta resolução para ícones arrastáveis.</li>
<li><a href="https://webzoneware.com/web-academy/html/geolocalizacao-api-html5/">Lição 37: API de Geolocalização</a>: Descubra como obter as coordenadas geográficas do usuário no HTML5.</li>
</ul>
<h2>7. Referências Técnicas &#038; Especificações Oficiais</h2>
<ul>
<li><a href="https://html.spec.whatwg.org/multipage/dnd.html" target="_blank" rel="noopener">WHATWG HTML Living Standard: Drag and Drop Specification</a></li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API" target="_blank" rel="noopener">MDN Web Docs: HTML Drag and Drop API Guide</a></li>
<li><a href="https://www.w3.org/WAI/ARIA/apg/patterns/listbox/" target="_blank" rel="noopener">W3C Web Accessibility Initiative: Reordering and Drag Patterns</a></li>
</ul>
<p><!-- Schema.org TechArticle JSON-LD --><br />
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "TechArticle",
  "headline": "HTML5 Drag and Drop API: Arrastar e Soltar Elementos e Arquivos",
  "description": "Aprenda a implementar o recurso de arrastar e soltar nativo no HTML5 com a Drag and Drop API e o objeto dataTransfer.",
  "url": "https://webzoneware.com/web-academy/html/drag-and-drop-api-html5/",
  "inLanguage": "pt-BR",
  "proficiencyLevel": "Intermediate",
  "articleSection": "Web Academy - Curso de HTML & HTML5 Completo",
  "author": {
    "@type": "Organization",
    "name": "Web-ZoneWare",
    "url": "https://webzoneware.com"
  },
  "publisher": {
    "@type": "Organization",
    "name": "Web-ZoneWare",
    "logo": {
      "@type": "ImageObject",
      "url": "https://webzoneware.com/wp-content/themes/astra-child/assets/images/logo.png"
    }
  }
}
</script></p>
<p>O post <a href="https://webzoneware.com/web-academy/curso-html/drag-and-drop-api-html5/">HTML5 Drag and Drop API: Guia Prático | Web Academy</a> apareceu primeiro em <a href="https://webzoneware.com">Web-Zoneware</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://webzoneware.com/web-academy/curso-html/drag-and-drop-api-html5/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
