Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

164
Visualizações
JS classList.remove() funciona de manera irregular durante los eventos de arrastre

Estoy tratando de construir un sistema de arrastrar y soltar, que resalta las zonas de colocación disponibles al arrastrar un elemento de arrastre sobre ellas. Hago esto agregando una clase a una zona de colocación, cuando un elemento de arrastre adecuado pasa sobre ella. Sin embargo, cuando el elemento de arrastre se va (evento "dragleave"), a veces la clase no se elimina y el resaltado dice. ¿Cuál podría ser una posible razón para este comportamiento y cómo lo soluciono?

Ejemplo del error:

error en un gif

Extracto del código:

 // drag events element.addEventListener("dragenter", (event) => { event.stopPropagation(); event.preventDefault(); checkBacktrack(event.target); }); element.addEventListener("dragleave", (event) => { event.stopPropagation(); event.preventDefault(); if (event.target === nodeStack.at(-1)) { popNodeStack(); } }); // Node stack functions (nodeStack = stack of nodes to keep track): const checkBacktrack = (element) => { for (let i = nodeStack.length - 1; i >= 0; i--) { const topNode = nodeStack.at(-1); if (topNode === element) { return true; } else if (topNode.contains(element)) { pushNodeStack(element); return true; } else { popNodeStack(); } } pushNodeStack(element); return false; }; const popNodeStack = () => { const removedNode = nodeStack.pop(); tryPopHighlight(removedNode); }; const pushNodeStack = (element) => { nodeStack.push(element); tryPushHighlight(element); }; //Highlight functions (highlightStack = stack of elements to highlight): const tryPushHighlight = (element) => { if (_isValidDropzone(element)) { pushHighlight(element); } }; const tryPopHighlight = (element) => { if (highlightStack.at(-1) === element) { popHighlight(); } }; const pushHighlight = (element) => { element.classList.add("drag-under-item"); const currentHighlight = highlightStack.at(-1); if (currentHighlight) { currentHighlight.classList.remove("drag-under-item"); } highlightStack.push(element); }; const popHighlight = () => { setTimeout(() => { const removedHighlight = highlightStack.pop(); if (removedHighlight) removedHighlight.classList.remove("drag-under-item"); const newHighlight = highlightStack.at(-1); if (newHighlight) newHighlight.classList.add("drag-under-item"); }); };
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Literalmente, 1 minuto después de publicar esto, encontré el problema. Moví NodeStack y HighlightStack fuera del cuerpo de la función a un contexto estático, ahora todo funciona como magia...

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda