diff --git a/client/src/utils.jsx b/client/src/utils.jsx index b280b134..f8547ac0 100644 --- a/client/src/utils.jsx +++ b/client/src/utils.jsx @@ -56,8 +56,34 @@ function requestAvatar(name) { .then(svg => svg); } +const animations = {}; +function animateCryp(id) { + if (animations[id]) return false; + animations[id] = true; + const target = document.getElementById(id); + return anime({ + targets: target, + translateX: () => anime.random(-20, 20), + translateY: () => anime.random(0, -40), + rotate: () => anime.random(-15, 15), + duration: () => anime.random(2000, 5000), + delay: () => anime.random(0, 2000), + direction: 'alternate', + easing: 'linear', + loop: true, + complete: () => animations[id] = false, + }); +} + +function clearAnimation(id) { + animations[id] = false; +} + function crypAvatar(name, id) { - useEffect(() => animateCryp(id)); + useEffect(() => { + animateCryp(id); + return () => clearAnimation(id); + }); return ( anime.random(-20, 20), - translateY: () => anime.random(0, -40), - rotate: () => anime.random(-15, 15), - duration: () => anime.random(2000, 5000), - delay: () => anime.random(0, 2000), - direction: 'alternate', - easing: 'linear', - loop: true, - }); -} - module.exports = { animateCryp, stringSort,