Не работает анимация после изменения классов

Возникла проблема с анимацией. Есть такой toolbar в котором есть кнопка раскрытия/скрытия. Через js менял классы самому svg, а также всей кнопке. При наведении на кнопку она подымается или опускается (в зависимости от того в каком направлении расположена иконка). При первом нажатии анимация работает корректно, при втором и последующих уже не работает

введите сюда описание изображения

введите сюда описание изображения

HTML

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Draft</title>
    <link rel="stylesheet" href="draft.css">

</head>

<body>
<div class="sidebar toolbar">
    <div class="open toolbar-btn">
        <img src="../img/icons/chevron.svg" alt="Open" class="chevron chevron-down" draggable="false">
    </div>

    <div class="font toolbar-btn">
        <img src="../img/icons/font.svg" alt="">
    </div>
    <div class="underline toolbar-btn">
        <img src="../img/icons/underline.svg" alt="">
    </div>
    <div class="italic toolbar-btn">
        <img src="../img/icons/italic.svg" alt="">
    </div>
    <div class="color toolbar-btn">
        <img src="../img/icons/color.svg" alt="">
    </div>
    <div class="resize toolbar-btn">
        <img src="../img/icons/resize.svg" alt="">
    </div>
    <div class="download toolbar-btn">
        <img src="../img/icons/download.svg" alt="">
    </div>

    <div class="empty"></div>

    <div class="lock toolbar-btn">
        <img src="../img/icons/lock.svg" alt="">
    </div>
</div>

<script src="script.js"></script>
</body>
</html>

CSS

@import "../css/nullstyle";

$scroll-color: linear-gradient(180deg, #A00BC5 0%, #1B5454 100%);
$scroll-color-hover: linear-gradient(180deg, #D012FF 0%, #0B9191 100%);
$panels-color: linear-gradient(90deg, #161616 -23.12%, #262525 100%);

.open, .hide {
  transition: transform 300ms;

  &:hover {
    .chevron-down {
      transform: translateY(7px);
    }

    .chevron-up {
      transform: translateY(-7px);
    }
  }

  .chevron {
    transition: inherit;
  }
}

.toolbar {
  width: 80px;
  height: 80px;
  border-radius: 15px;
  background: $panels-color;
  overflow: hidden;
  display: grid;

  transition: height 300ms;

  .toolbar-btn, .empty {
    display: grid;
    justify-items: center;
    align-items: center;
    width: 80px;
    height: 80px;
  }
}

JS

let chevronFromToolbar = document.querySelector('.toolbar-btn > .chevron');
let toolbar =  document.querySelector('.toolbar');

let chevronFromSaves = document.querySelector('.saves-btn > .chevron');
function rotateChevron (chevron, degrees) {
        chevron.style.transform = `rotate(${degrees}deg)`;
}

toolbar.firstElementChild.onclick = () => {
    if (toolbar.firstElementChild.classList.contains('open')) {
        toolbar.style.height = '720px';
        toolbar.firstElementChild.style.order = '8 ';
        chevronFromToolbar.classList.remove('chevron-down');
        chevronFromToolbar.classList.add('chevron-up');

        rotateChevron(chevronFromToolbar, 180);

        toolbar.firstElementChild.classList.remove('open');
        toolbar.firstElementChild.classList.add('hide');
    }
    else if (toolbar.firstElementChild.classList.contains('hide')) {
        toolbar.style.height = '80px';
        toolbar.firstElementChild.style.order = '0';
        chevronFromToolbar.classList.remove('chevron-up');
        chevronFromToolbar.classList.add('chevron-down');

        rotateChevron(chevronFromToolbar, 360);

        toolbar.firstElementChild.classList.remove('hide');
        toolbar.firstElementChild.classList.add('open');
    }
};

Ответы (1 шт):

Автор решения: Алексей Мельников

Вызов функции rotateChevron переопределяет стили прописывая их инлайново в разметке, а именно свойство transform

введите сюда описание изображения

Отказаться от использования функции rotateChevron и логику переворота возложить на css. Вы уже добавляете определённый класс .chevron-up, поэтому можно просто дописать стиль

.open,
.hide {
  transition: transform 300ms;

  &:hover {
    .chevron-down {
      transform: translateY(7px);
    }

    .chevron-up {
      transform: translateY(-7px);
    }
  }

  .chevron {
    transition: inherit;

    &.chevron-up {
      transform: rotate(180deg);
    }
  }
}

Чтобы ховер для шеврона работал и при раскрытом меню,меняя его положение, можно добавить веса селектору и добавив ту же самую трансформацию

.open,
.hide {
  transition: transform 300ms;

  &:hover {
    .chevron-down {
      transform: translateY(7px);
    }

    .chevron.chevron-up {
      transform: rotate(180deg) translateY(7px);
    }
  }

  .chevron {
    transition: inherit;

    &.chevron-up {
      transform: rotate(180deg);
    }
  }
}
→ Ссылка