Estoy tratando de mover un cuadro permitiendo que el usuario haga clic en un botón , pero solo quiero que el usuario pueda llamar a la función una vez en 'javascript'.
function myMove() { let id = null; let id2 = null; const elem = document.getElementById("animate"); let pos = 0; clearInterval(id); id = setInterval(frame, 1); function frame() { if (pos == 250) { clearInterval(id); id2 = setInterval(backframe, 1); } else { pos++; elem.style.top = pos + "px"; elem.style.left = pos + "px"; } } function backframe() { if (pos == 0) { clearInterval(id2); id = setInterval(frame, 1); } else { pos--; elem.style.top = pos + "px"; elem.style.left = pos + "px"; } } }Para agregar un detector de eventos, que solo se activa una vez, addEventListener puede aceptar 3 argumentos: tipo, detector y opciones .
options es un objeto que tiene una propiedad llamada once , la ha establecido en true .
Ex:
button.addEventListener('click', myMove, { once: true })Aplique estas modificaciones a su código:
let wasUsed = false; function myMove() { if (wasUsed) return; // stops the function if it has ran before wasUsed = true; // the rest of your function doesn't change: let id = null; let id2 = null; ... }