Falta pouco!

0 dias

0 horas

0 min

0 seg

2
respostas

[Projeto] QUAL O MELHOR CÓDIGO?

Olá espero que estejam todos bem!

Continuando os meus estudos em JavaScript, tenho em mãos 2 códigos que tem a função de controlar um menu lateral.

Na opinião de vocês qual é o melhor código?

1º Versão
const menu = document.getElementById("sideMenu");
const openButton = document.getElementById("openMenu");
const closeButton = document.getElementById("closeMenu");

openButton.addEventListener("click", () => {
menu.classList.add("open");
});

function fecharMenu() {
menu.classList.remove("open");
}

closeButton.addEventListener("click", () => {
fecharMenu();
});

document.addEventListener("keydown", (event) => {
if (event.key === "Escape") {
fecharMenu();
}
});

// Se click for diferente de sidemenu o menu é fechado
document.addEventListener("click", function (event) {
// "Se o menu ESTÁ ABERTO E o clique foi FORA do menu (e também não foi no botão de abrir)..."
if (menu.classList.contains("open") && !menu.contains(event.target) && !openButton.contains(event.target)) {
// "...então, FECHE O MENU."
fecharMenu();
}
});

2° Versão

// Espera o documento HTML inteiro ser carregado e analisado antes de executar o código.
// Isso garante que todos os elementos (sideMenu, openMenu, closeMenu) já existem.
document.addEventListener('DOMContentLoaded', function() {

// Seleciona os elementos UMA VEZ, após o DOM estar pronto.
const menu = document.getElementById("sideMenu");
const openButton = document.getElementById("openMenu");
const closeButton = document.getElementById("closeMenu");

// Adiciona uma verificação para garantir que todos os elementos foram encontrados.
// Se algum deles estiver faltando no HTML, o código não tentará adicionar
// event listeners a 'null', prevenindo erros.
if (!menu || !openButton || !closeButton) {
console.warn("Um ou mais elementos do menu lateral (sideMenu, openMenu, closeMenu) não foram encontrados. A funcionalidade do menu pode estar inativa.");
return; // Para a execução se os elementos não existirem.
}

// --- LÓGICA DE EVENTOS ---

openButton.addEventListener("click", () => {
menu.classList.add("open");
});

closeButton.addEventListener("click", () => {
menu.classList.remove("open");
});

document.addEventListener("keydown", (event) => {
if (event.key === "Escape" && menu.classList.contains("open")) { // Adicionada verificação se o menu já está aberto
menu.classList.remove("open");
}
});

// Se o clique for fora do menu, o menu é fechado
document.addEventListener("click", function (event) {
if (
menu.classList.contains("open") && // O menu está aberto?
!menu.contains(event.target) && // O clique foi FORA do menu?
!openButton.contains(event.target) // O clique também foi FORA do botão de abrir?
) {
menu.classList.remove("open");
}
});

});

2 respostas

Oi, Mateus, tudo bem?

Excelente pergunta! Comparar códigos é uma ótima forma de evoluir.

A segunda versão é a melhor. Ela é mais segura por usar o DOMContentLoaded, que garante que o HTML carregue antes de o script rodar, e também por verificar se os elementos realmente existem na página. Isso evita que seu código quebre inesperadamente.

Basicamente, a segunda versão se antecipa a possíveis erros, o que é uma prática mais profissional. Mandou bem na análise!

Espero ter ajudado! Bons estudos!

Sucesso

Imagem da comunidade

Obrigado Victor pelo feedback!

Sucesso ✨