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

163
Visualizações
Interrumpir la transición de CSS y saltar al estado final

Estoy tratando de hacer una 'animación' simple usando una transición css directa. Durante la vida de la aplicación, los botones mostrar y ocultar deben comportarse como lo hacen, es decir. rápido. Pero al principio, quiero que la caja se comporte como el botón de crecimiento (es decir, una transición más lenta). Sin embargo, me gustaría poder interrumpir esta transición de crecimiento y hacer que "salte hasta el final" como si la función de apertura se hubiera hecho cargo.

Lo interesante es que si el botón 'finalizar' establece el estilo de ancho en el mismo valor que la transición de crecimiento, la transición de crecimiento no se interrumpe. Pero si configuro el nuevo valor de ancho en la función final ligeramente diferente, interrumpe la transición (vea el comentario en la función JavaScript end() del código).

 var box = document.getElementById('box'); function show() { box.style.transition = "width 0.1s"; box.style.width = "80vw"; } function hide() { /* alert("closeNav menu width = " + menu.style.width) */ box.style.transition = "width 0.1s"; box.style.width = "0vw"; } function grow() { box.style.transition = "width 5s"; box.style.width = "80vw"; } function end() { box.style.transition = "width 0.1s" box.style.width = "80.001vw"; // will not interrupt grow transition if set to 80vw } hide();
 #box { width: 80vw; height: 20vh; background-color: blue; border: 3px solid orange; transition: width 0.5s; }
 <div> <div id="box"></div> <button onclick="hide();" style="height: 25px;">Hide</button> <button onclick="show();" style="height: 25px;">Show</button> <button onclick="grow();" style="height: 25px;">Grow</button> <button onclick="end();" style="height: 25px;">End</button> </div>

¿Hay una mejor manera de tratar de lograr este efecto? Creo que la animación css simplemente haría lo mismo, ya que parece que, a menos que el nuevo valor sea diferente del valor anterior, la transición inicial no se detiene.

PD. Esta es una versión simplificada, y la más compleja es una superposición para un logotipo que se encoge en la esquina a medida que un menú lateral se expande lentamente para cumplir con la superposición que se reduce. Necesito que el menú se muestre/oculte rápidamente en función de sus botones después durante las operaciones normales, pero si el usuario no quiere esperar la transición de la superposición y la reunión del menú, puede hacer clic en cualquier lugar y finalizar la transición, lo que significa que el menú salta a su ancho completo de 'mostrar'.

Necesario para todos los navegadores, pero desarrollando esto en Google Chrome Versión 102.0.5005.115 (Compilación oficial) (64 bits)

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Puede hacer un truco con el restablecimiento del ancho combinándolo con requestAnimationFrame (o setTimeout ), pero en realidad, no restablecerá su ancho y continuará la animación desde el ancho restante.

 var box = document.getElementById('box'); function show() { box.style.transition = "width 0.1s"; box.style.width = "80vw"; } function hide() { /* alert("closeNav menu width = " + menu.style.width) */ box.style.transition = "width 0.1s"; box.style.width = "0vw"; } function grow() { box.style.transition = "width 5s"; box.style.width = "80vw"; } function end() { box.style.width = "0"; //reset width window.requestAnimationFrame(function(){ box.style.width = "80vw"; box.style.transition = "width 0.1s"; }); } hide();
 #box { width: 80vw; height: 20vh; background-color: blue; border: 3px solid orange; transition: width 0.5s; }
 <div> <div id="box"></div> <button onclick="hide();" style="height: 25px;">Hide</button> <button onclick="show();" style="height: 25px;">Show</button> <button onclick="grow();" style="height: 25px;">Grow</button> <button onclick="end();" style="height: 25px;">End</button> </div>

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