animation on every click

I am trying to create an animation for every dice roll, but it only occurs once and then stops. How can I fix this? https://codepen.io/etrbbr/pen/azoKQrx
7 Replies
ἔρως
ἔρως3mo ago
you need to restart the animation a simple way to do it (and add some needed debouncing) is to listen for the animationend event, and then remove the class that triggers the animation
Helgi
HelgiOP3mo ago
i was thinking about it. do i need to remove it in my function?
ἔρως
ἔρως3mo ago
no, add and remove it in the function
Helgi
HelgiOP3mo ago
just in case someone will need it here solution and it works: const rollDiceBtn = document.querySelector(".buttonRoll"); const animationAdd = document.querySelector(".imgDice5"); rollDiceBtn.addEventListener("click", function () { let randomDice = Math.trunc(Math.random() * 6) + 1; animationAdd.src = dice-${randomDice}.svg; let animationOnDice = "rollDice 1.5s cubic-bezier(0.68, -0.55, 0.27, 1.55)"; animationAdd.style.animation = animationOnDice; }); animationAdd.addEventListener("animationend", function () { animationAdd.style.animation = ""; }); i just added animationAdd.addEventListener("animationend", function () { animationAdd.style.animation = ""; }); i have one more question. id like to add "history" of rolls, like roll 1 and result roll 2 and result. but i kinda dont understand how i add image i am using counter to count amounf of rolls, here is code amountOfRolls += 1; li.appendChild(document.createTextNode(Roll ${amountOfRolls}:)); rollHistoryUl.appendChild(li);
ἔρως
ἔρως3mo ago
can you add proper syntax highlighting to this, please? it's almost impossible to read anything
Helgi
HelgiOP3mo ago
sorry i will send codepen rn https://codepen.io/etrbbr/pen/ZYzRwpb
ἔρως
ἔρως3mo ago
i have a suggestion for you instead of having 6 external svg files, why don't you throw the dice into a single svg, added inline, with symbols? and if you want some sort of history, you can store the values in an array, then display it but clear out old values

Did you find this page helpful?