Как можно добиться такого же эффекта наведения на кнопку?
Есть пример реализации hover кнопки на сайте https://www.hackuity.io/. Как можно добиться такого же эффекта? Может библиотека есть какая?
Решил реализовать таким способом:
<nav className={styles.nav}>
<ul>
<li>
<span className={styles.textContainer}>
<span className={styles.text}>Home</span>
</span>
<span className={styles.item}></span>
<span className={styles.item}></span>
<span className={styles.item}></span>
<span className={styles.item}></span>
<span className={styles.item}></span>
<span className={styles.item}></span>
<span className={styles.item}></span>
<span className={styles.item}></span>
<span className={styles.item}></span>
<span className={styles.item}></span>
</li>
</ul>
</nav>
.nav ul {
list-style-type: none;
margin: 0;
padding: 0;
}
.nav ul li {
--c: goldenrod;
background-color: #FFFFFF;
color: var(--c);
font-size: 16px;
border: 0.3em solid var(--c);
border-radius: 0.5em;
width: 15em;
height: 3em;
text-transform: uppercase;
font-weight: bold;
font-family: sans-serif;
letter-spacing: 0.1em;
text-align: center;
line-height: 3em;
position: relative;
overflow: hidden;
z-index: 1;
transition: 0.5s;
margin: 1em;
}
.nav ul li .item {
position: absolute;
width: 10%;
height: 100%;
background-color: var(--c);
transform: translateY(150%);
border-radius: 0;
left: calc((var(--n) - 1) * 10%);
transition: 0.5s;
transition-delay: calc((var(--n) - 1) * 0.05s);
z-index: -1;
}
.textContainer {
display: block;
position: relative;
overflow: hidden;
}
.text {
display: block;
position: relative;
font-weight: 900;
}
.nav ul li:hover .text {
color: black;
animation: move-up-alternate 0.3s forwards;
}
@keyframes move-up-alternate {
from {
transform: translateY(0%);
}
50% {
transform: translateY(80%);
}
51% {
transform: translateY(-80%);
}
100% {
transform: translateY(0%);
}
}
.nav ul li:hover .item {
transform: translateY(-50%) scale(2);
}
.nav ul li .item:nth-child(2) {
--n: 1;
}
.nav ul li .item:nth-child(3) {
--n: 2;
}
.nav ul li .item:nth-child(4) {
--n: 3;
}
.nav ul li .item:nth-child(5) {
--n: 4;
}
.nav ul li .item:nth-child(6) {
--n: 5;
}
.nav ul li .item:nth-child(7) {
--n: 6;
}
.nav ul li .item:nth-child(8) {
--n: 7;
}
.nav ul li .item:nth-child(9) {
--n: 8;
}
.nav ul li .item:nth-child(10) {
--n: 9;
}
.nav ul li .item:nth-child(11) {
--n: 10;
}
https://codepen.io/DmitryKhiliuk/pen/oNVKJML
Вроде бы анимация в блоке работает как надо, но в примере с вышеприведенного сайта, если быстро убрать курсор с кнопки, анимация прерывается и начинает отыгрывать в обратном направлении со своей финишной точки. Как можно этого добиться?