Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

130
Vistas
Stop CSS transition (in progress) and start from beginning

If I click keyboard arrow keys (next/previous), before previously transition is finished I want to start from the beginning.

That should happen both in handleNext & handlePrevious

Now it's not returning to base position (if I navigate before transition finished), even though I tried to force it with:

card.style.transition = "";
card.style.transform = "";

and than call handleMoving() to start moving again.

I also tried with removeEventListener, but something strange is happening.

Maybe somehow to remove transitionend and set it again?

WHOLE CODE:

document.body.onkeydown = handleKeyDown;

const card = document.getElementById('card');
let direction;


function handleKeyDown(e) {
    if(e.key === "ArrowRight") handleNext();
    if(e.key === "ArrowLeft") handlePrevious();
}

function handleNext() {
    direction = "next"
    
    // If I click arrow next/previous before previous transition is finished I want to start from the beginning
    
    /* NOT WORKING */
    
    disableTransition(); // Here I want to disable previously transition that is in proccess (probably)
    removeTransform(); // Remove translateX -2rem or 2rem, be ready from 0px everytime
    
    /* END NOT WORKING */
    
    handleMoving(); // Prepared from start, handle moving again
}

function handlePrevious() {
    direction = "previous"
    
    disableTransition();
    removeTransform();
    
    handleMoving();
}

function handleMoving() {
    enableTransition();
    addTransform();
}

function enableTransition() {
    card.style.transition = "transform .5s ease-in-out";
}

function disableTransition() {
    card.style.transition = "";
}

function addTransform() {
    card.style.transform = (direction === 'previous') ? "translate3d(-2rem, 0, 0)" : "translate3d(2rem, 0, 0)";
    card.addEventListener('transitionend', removeTransform, {once: true});
}

function removeTransform() {
    card.style.transform = "";
}
.card {
  position: absolute;
  inset: 0;
  border: 2px solid black;
}

.card-wrapper {
  position: relative;
  width: 300px;
  height: 150px;
  background: lightgray;
  margin: auto;
}
<div class="card-wrapper">
  <div id="card" class="card"></div>
</div>

about 4 years ago · Juan Pablo Isaza
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda