Обнаружена следующая проблема при попытке объединить переходы CSS с обработчиками событий JS. Я знаю, как использовать свойство перехода CSS, например:
div {
width: 50px;
height: 50px;
background: blue;
transition: width 2s;
}
div:hover {
width: 300px;
}<div></div>Я также знаю, как разместить обработчик кликов на элементе DOM следующим образом:
let eventDiv = document.querySelector('#clickMe');
let hiddenDiv = document.querySelector('#hiddenDiv');
eventDiv.onclick = () => {
if (hiddenDiv.style.display === 'block') {
hiddenDiv.style.display = 'none'
} else{
hiddenDiv.style.display = 'block';
}
}#clickMe{
width: 100px;
height: 50px;
background-color: blue;
}
#hiddenDiv {
width: 100px;
height: 50px;
background-color: green;
display: none;
}<div id = "clickMe"></div>
<div id = "hiddenDiv"></div>Как мне объединить эти два и получить переход CSS (<div> не должен появляться сразу, а должен появиться), когда я переключаю видимость <div> с событием onclick JS?
Вы не можете перейти на display.
свойства отображения не анимируются



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Проблема здесь в том, что вы не можете передать transition свойству display:
div {
width: 50px;
height: 50px;
background: blue;
transition: 2s;
}
div:hover {
display:none;
}<div></div>Что вы можете сделать, так это использовать вместо него opacity.
let eventDiv = document.querySelector('#clickMe');
let hiddenDiv = document.querySelector('#hiddenDiv');
eventDiv.onclick = () => {
if (hiddenDiv.style.opacity === '1') {
hiddenDiv.style.opacity = '0'
} else{
hiddenDiv.style.opacity = '1';
}
}#clickMe{
width: 100px;
height: 50px;
background-color: blue;
}
#hiddenDiv {
width: 100px;
height: 50px;
background-color: green;
opacity: 0;
transition: 2s;
}<div id = "clickMe"></div>
<div id = "hiddenDiv"></div>ВАЖНЫЙ
Если вы решите использовать это свойство, не забудьте изменить display на none после завершения перехода, если вы не хотите, чтобы это был block.
Согласно моему комментарию, чтобы объединить js и переход, вам нужно добавить и удалить класс, который изменяет свойство, которое вы хотите перенести.
В приведенном ниже фрагменте я добавляю и удаляю класс скрытия, который изменяет высоту (на которой есть трнезия).
let eventDiv = document.getElementById('clickMe');
let hiddenDiv = document.getElementById('hiddenDiv');
eventDiv.onclick = () => {
if (hiddenDiv.classList.contains("hide")) {
hiddenDiv.classList.remove("hide");
} else{
hiddenDiv.classList.add("hide");
}
}#clickMe{
width: 100px;
height: 50px;
background-color: blue;
}
#hiddenDiv {
width: 100px;
height: 50px;
background-color: green;
overflow:hidden;
transition: height 1s;
}
#hiddenDiv.hide {
height: 0;
}<div id = "clickMe"></div>
<div id = "hiddenDiv" class = "hide"></div>
вам нужно добавить и удалить класс, который изменяет свойство с переходом на