#javascript #css
#javascript #css
Вопрос:
Я хочу повернуть элемент onclick, добавив к нему класс CSS. Проблема в том, что когда тот же самый класс CSS удаляется, элемент поворачивается во второй раз.
скрипка:https://jsfiddle.net/L3x2zhd1/1 /
JS:
var el = document.getElementById('el');
el.onclick = function() {
el.className = 'rotate'
setTimeout(function(){
el.className = ''
},1000)
};
CSS:
#el {
width: 50px;
height: 50px;
background-color: red;
-webkit-transition: -webkit-transform 1s;
transition: transform 1s;
}
.rotate {
-webkit-transform: rotate(180deg);
transform: rotateX(180deg);
}
Как я могу избежать этого?
Комментарии:
1. поместите
transition: transform 1s
(и префиксы поставщика) в класс .rotate
Ответ №1:
Вам нужно будет поместить transition: transform 1s
(и связанные с ним префиксы поставщика) в .rotate
правило css:
Причина двойной анимации: Вы определили свойство перехода для корневого элемента. В результате, когда он пытался вернуться в свое нормальное положение, он снова вращался из-за transition
.
var el = document.getElementById("el");
el.addEventListener("click", function() {
el.classList.add("rotate");
setTimeout(function() {
el.classList.remove("rotate");
}, 1000);
});
#el {
width: 50px;
height: 50px;
background-color: red;
color: white;
font-weight: bold;
text-align: center;
}
.rotate {
-webkit-transition: -webkit-transform 1s;
transition: transform 1s;
-webkit-transform: rotateX(180deg);
transform: rotateX(180deg);
}
<div id="el">test</div>
Ответ №2:
Вы могли бы просто переключать класс вместо добавления и удаления его.
$('#el').click(function(){
$(this).toggleClass('rotate');
});
#el {
width: 50px;
height: 50px;
background-color: red;
-webkit-transition: -webkit-transform 1s;
transition: transform 1s;
}
.rotate {
-webkit-transform: rotate(180deg);
transform: rotateX(180deg);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="el"></div>
Комментарии:
1. OP ничего не упоминает о желании использовать jQuery
2. Я хочу использовать vanilla JS для этого 🙂
3. Затем примените этот логин к ванильному JavaScript?