jQuery / Método / .fadeOut() - Ocultar elementos gradualmente
No jQuery, .fadeOut() reduz a opacidade e depois aplica display: none. Sumir da tela e do layout não exclui o elemento DOM; ele pode ser mostrado novamente. Para removê-lo, chame .remove() no callback de conclusão, depois de terminar o efeito.
Ocultação, remoção e duração
A documentação de .fadeOut() explica que display: none também elimina o espaço ocupado no layout ao concluir. Durante o efeito, a opacidade diminui; a altura não se recolhe gradualmente. Remover do modelo de objetos do documento, DOM, é outra operação.
| Operação | Elemento depois | Resultado | Significado de Restore |
|---|---|---|---|
| Somente .fadeOut() | Oculto, permanece no DOM | hidden / nodes=1 | Mostrar o existente preservando a entrada editada |
| .remove() após concluir | Removido do DOM | removed / nodes=0 | Recriar HTML e valor iniciais |
.fadeOut(duration, easing, complete) aceita argumentos opcionais. A duração padrão é 400 ms, "fast" vale 200 e "slow" 600. .fadeOut(800) desaparece ao longo de 800 ms, sem esperar antes de começar. easing usa swing por padrão; "linear" após a duração dá progressão constante.
Exemplo completo com entrada editável
Salve todo o código em UTF-8 como fadeout-demo.html e abra no navegador. Não exige instalação, mas é preciso internet para carregar a distribuição oficial completa do jQuery pela rede de distribuição de conteúdo, ou CDN. Slim exclui efeitos: use o arquivo completo.
O código usa 4.0.0. Ocultação, remoção, valores, restauração e reinício durante o efeito foram executados com 3.7.1 e 4.0.0. Os controles ficam fora do aviso, mantendo Restore e Reset disponíveis após o desaparecimento.
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Fade out versus remove</title>
<style>
body { font: 16px/1.6 sans-serif; margin: 24px; }
#notice { padding: 20px; background: #e5f2f0; margin: 16px 0; }
button, select, input { padding: 8px; margin: 4px; }
</style>
<script src="https://code.jquery.com/jquery-4.0.0.min.js"></script>
</head>
<body>
<h1>Fade out versus remove</h1>
<label for="duration">Duration:</label>
<select id="duration"><option value="800">800 ms</option><option value="0">0 ms</option></select>
<button type="button" id="fade">Fade only</button>
<button type="button" id="remove">Fade then remove</button>
<button type="button" id="restore">Restore</button>
<button type="button" id="reset">Reset</button>
<div id="host">
<div id="notice">
<p>A temporary notice</p>
<label>Note: <input id="note" value="Keep me"></label>
</div>
</div>
<p id="result" aria-live="polite"></p>
<script>
$(function () {
const initialHtml = $("#host").html();
function enable() {
$("#fade, #remove").prop("disabled", false);
}
function report(state) {
$("#result").text(`state=${state} | nodes=${$("#notice").length}`);
}
function fade(removeAfter) {
const $notice = $("#notice");
if (!$notice.length) {
report("missing");
return;
}
const reduce = window.matchMedia("(prefers-reduced-motion: reduce)").matches;
const duration = reduce ? 0 : Number($("#duration").val());
$notice.stop(true, false);
$("#fade, #remove").prop("disabled", true);
report("fading");
$notice.fadeOut(duration, function () {
if (removeAfter) $(this).remove();
enable();
report(removeAfter ? "removed" : "hidden");
});
}
$("#fade").on("click", () => fade(false));
$("#remove").on("click", () => fade(true));
$("#restore").on("click", function () {
if (!$("#notice").length) $("#host").html(initialHtml);
$("#notice").stop(true, false).css("opacity", "").show();
enable();
report("visible");
});
$("#reset").on("click", function () {
$("#notice").stop(true, false);
$("#host").html(initialHtml);
enable();
report("visible");
});
report("visible");
});
</script>
</body>
</html>
A entrada inicial contém Keep me e o resultado mostra:
state=visible | nodes=1
- Troque Note por edited e use Fade only. Após 800 ms:
state=hidden | nodes=1. - Restore mostra o mesmo aviso com edited preservado. Ocultar manteve o elemento original.
- Fade then remove remove após o efeito:
state=removed | nodes=0. Esperar antes de .remove() permite observar o fade. - Depois de remover, Restore recria o aviso pelo HTML inicial. A entrada volta a Keep me; edited não é recuperado automaticamente.
- Durante o efeito, Restore interrompe e mostra o existente. Reset interrompe e recria o HTML inicial, restaurando também a entrada.
- 0 ms executa a mesma conclusão sem transição. Detectar movimento reduzido também usa zero.
Para recuperar alterações reais após remover, guarde os dados separadamente e aplique ao novo elemento. Restore neste exercício mostra o existente ou recria conteúdo inicial fixo; não recupera entradas removidas.
Remover após concluir e tratar alvos ausentes
.remove() exclui elemento, conteúdo e dados/eventos jQuery associados. Não preserva como ocultar. No callback, este exemplo remove this somente se removeAfter for verdadeiro. Na função comum, this é o elemento DOM cujo efeito terminou.
.fadeOut() não bloqueia o JavaScript seguinte. .remove() imediatamente depois excluiria o elemento antes da conclusão. Com vários elementos, o callback executa para cada um; aqui, um ID único limita intencionalmente o alvo.
Uma seleção vazia não tem callback por elemento. O exemplo confere .length e informa state=missing | nodes=0 se já foi removido. Os botões não ficam desativados esperando um alvo inexistente.
Restauração durante o efeito e repetição
.stop(true, false) limpa a fila e interrompe o efeito atual sem concluir nem executar seu callback. Um callback antigo não pode remover o aviso após Restore ou Reset. Restore limpa opacidade intermediária e chama .show(); Reset interrompe antes de substituir o HTML.
Os botões Fade ficam desativados durante o efeito, enquanto Restore e Reset continuam disponíveis. Diferencie conclusão normal de cancelamento para manter contador e tela coerentes.
Se houver problemas, verifique o arquivo completo, .fadeOut is not a function em Console e o escopo do seletor. Sumir imediatamente pode vir de 0 ms ou movimento reduzido. Um elemento já oculto não repete um fade visível: restaure antes de comparar.




