Я пытаюсь по щелчку переключить .post__input--not-set
в scale
. Пытался добавить преобразование CSS, но безуспешно.
$(".post__input--not-set").hide();
$('.btn-class').click(function() {
$(this).toggleClass("new");
$(this).find('i').toggleClass('fa-check fa-pencil-alt');
$(".post__input--not-set").addClass('animate').toggle();
});
.btn-class {
color: white;
padding: 30px;
background: blue;
}
.new {
background-color: green
}
.post__input--not-set {
transform: scale(0);
transition: all 5s;
height: 50px;
width: 50px;
border-radius: 50%;
background-color: red
}
.post__input--not-set.animate {
transform: scale(1);
}
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link href = "https://use.fontawesome.com/releases/v5.0.10/css/all.css" rel = "stylesheet" />
<a class = "btn-class"><i class = "fa fa-pencil-alt"></i></a>
<div class = "post__input--not-set"></div>
<div class = "post__input--not-set"></div>
<div class = "post__input--not-set"></div>
Вы можете удалить $(".post__input--not-set").hide()
из своего js и переключить только transform
. Это работает для вас?
$('.btn-class').click(function() {
$(this).toggleClass("new");
$(this).find('i').toggleClass('fa-check fa-pencil-alt');
$(".post__input--not-set").toggleClass('animate');
});
.btn-class {
color: white;
padding: 30px;
background: blue;
}
.new {
background-color: green
}
.post__input--not-set {
transform: scale(0);
transition: transform 5s;
height: 50px;
width: 50px;
border-radius: 50%;
background-color: red
}
.post__input--not-set.animate {
transform: scale(1);
}
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link href = "https://use.fontawesome.com/releases/v5.0.10/css/all.css" rel = "stylesheet" />
<a class = "btn-class"><i class = "fa fa-pencil-alt"></i></a>
<div class = "post__input--not-set"></div>
<div class = "post__input--not-set"></div>
<div class = "post__input--not-set"></div>
Переходы не работают, если элемент изначально отсутствует. Стиль display: none
фактически удаляет элементы. Итак, когда вы переключаете свойство display
, они уже воссоздаются с классом animate
, и нет ничего изменение для анимации.
Единственный (но неправильный) способ заставить его работать - сначала отобразить элементы, принудительно выполнить перекомпоновку (заставить браузер рисовать их без класса animate
), а затем установить класс animate
.
Правильные способы были бы
visibility
или opacity
, чтобы скрыть их), но это не всегда возможно, потому что они будут там занимает место и принимает события,Интересное обсуждение: CSS3 переход по клику с использованием чистого CSS
Возможное решение:
$(".post__input--not-set").hide();
$('.btn-class').click(function() {
$(this).toggleClass("new");
$(this).find('i').toggleClass('fa-check fa-pencil-alt');
$(".post__input--not-set").addClass('animate').toggle();
if ($(".post__input--not-set").css("transform") == 'none') {
$(".post__input--not-set").css("transform", "scale(0)");
} else {
$(".post__input--not-set").css("transform", "scale(1)");
}
});
.btn-class {
color: white;
padding: 30px;
background: blue;
}
.new {
background-color: green
}
.post__input--not-set {
transform: scale(0);
transition: transform 5s;
height: 50px;
width: 50px;
border-radius: 50%;
background-color: red
}
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link href = "https://use.fontawesome.com/releases/v5.0.10/css/all.css" rel = "stylesheet" />
<a class = "btn-class"><i class = "fa fa-pencil-alt"></i></a>
<div class = "post__input--not-set"></div>
<div class = "post__input--not-set"></div>
<div class = "post__input--not-set"></div>