Похоже, вы не настраиваете переход должным образом.Переходы обычно располагаются в базовом состоянии и запускаются, когда что-то меняется (например, сложение или вычитание класса).Например:
const button = document.querySelector("button");
const actionDialog = document.querySelector(".action-dialog");
function handleClick() {
actionDialog.classList.toggle("is-active");
actionDialog.querySelector("em").innerHTML = actionDialog.classList.contains("is-active") ? "active" : "inactive";
}
button.addEventListener("click", handleClick);
.box {
background-color: red;
width: 100px;
height: 100px;
margin-bottom: 2em;
position: relative;
}
.box span {
position: absolute;
bottom: -1.5em;
left: 50%;
transform: translateX(-50%);
white-space: nowrap;
}
/* Once the 'is-active' class is removed, transition back
to the starting position */
.action-dialog {
transform: translateX(0);
/* Here we define what will happen when a change occurs */
transition: 0.4s all ease-in-out;
}
/* Occurs only when the class is added */
.action-dialog.is-active {
transform: translateX(300px);
}
<div class="box action-dialog">
<span>State: <em>inactive</em></span>
</div>
<button>Toggle action</button>
Редактировать В своем комментарии вы спросили:
Есть ли способ установитьпереход, когда отображается всплывающее окно?
Я бы создал анимацию и сразу применил бы ее.Анимация происходит сразу, без необходимости добавления или удаления класса.
Например:
.action-dialog {
width: 50px;
height: 50px;
background-color: red;
animation: 1s move-dialog forwards;
}
@keyframes move-dialog {
from {
transform: translateX(0);
}
to {
transform: translateX(200px);
}
<div class="action-dialog"></div>