Вы вызываете функцию как в событии входа, так и в событии выхода. Это означает, что вы создаете и возвращаете анимацию каждый раз, когда происходит одно из этих событий.
Вместо этого вы хотите создать временную шкалу один раз , а затем использовать методы управления на этой временной шкале.
cards.forEach((card) => {
const cardCover = card.querySelector(".card__cover");
const anim = cardAnim(cardCover);
card.addEventListener("mouseenter", () => anim.play());
card.addEventListener("mouseleave", () => anim.reverse());
});
Демо . Я более подробно пишу на эту тему в своей статье об эффективной анимации .
К вашему сведению: у вас больше шансов получить более быстрый ответ на форумах GreenSock .