Вы можете попробовать использовать один класс active
и соответствующую анимацию CSS
. Смотрите пример ниже.
document.querySelectorAll('.wrapper > div').forEach(() => {
this.addEventListener('click', (e) => {
if(e.target.matches('div')) {
document.querySelector('.active').classList.remove('active');
e.target.classList.add('active');
}
});
});
div.wrapper {
display: inline-flex;
background-color: lightgreen;
border-radius: .5rem;
}
div.wrapper > div {
width: 10vw;
border-radius: .5rem;
text-align: center;
background-color: transparent;
}
div.active {
animation: change 1.2s;
animation-fill-mode: forwards;
background-color: red;
}
@keyframes change {
from {
background-color: transparent;
}
to {
background-color: red;
}
}
<div class="wrapper">
<div class="active" id="bar1">
Option1
</div>
<div id="bar2">
Option2
</div>
</div>
Редактировать
Вам нужна только строка JavaScript, чтобы добавить focus
или установить active
элемент навигации по вашему выбору. Вы можете использовать a
элементы вместо div
и работать с псевдоклассами :active
и :focus
.
div.wrapper {
display: inline-flex;
background-color: lightgreen;
border-radius: .5rem;
}
div.wrapper > a {
width: 10vw;
border-radius: .5rem;
padding: .125rem;
text-align: center;
font-size: 1.125rem;
background-color: transparent;
text-decoration: none;
}
a:focus, a:active {
animation-name: change;
animation-timing-function: ease;
animation-fill-mode: forwards;
animation-duration: 0.9s;
}
@keyframes change {
from {
background-color: transparent;
}
to {
background-color: red;
color:#fff;
font-weight: 700;
}
}
<div class="wrapper">
<a href="#bar1" tabindex="1" id="bar1">
Option1
</a>
<a href="#bar2" tabindex="2" id="bar2">
Option2
</a>
</div>