Я пытаюсь установить плавный переход при переключении div. Прямо сейчас переключение происходит немедленно.
$(document).ready(function(){
$(".product-suggestion-form-container").click(function(){
$(".form-div-top").toggle();
})
});
.description-container {
font-family: "Proxima Nova Regular";
}
.form-div-outer {
margin: 10px 0;
}
.product-suggestion-form-container {
border: 1px solid #c6c6c6;
border-bottom: none;
padding: 5px 10px;
display: flex;
justify-content: space-between;
background-color: #f8f7f7;
cursor: pointer;
}
/*initial display*/
.form-div-top {
display: none;
background-color: #f8f7f7;
border: 1px solid #c6c6c6;
}
<script src = "http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class = "description-container">
Fill out the product suggestion and contact us forms below:
</div>
<div class = "form-div-outer">
<div class = "product-suggestion-form-container">
<span class = "form-title">Product Suggestion Form</span>
<span class = "dropdown-arrow"><i class = "fas fa-caret-down"></i>
</span>
</div>
<div class = "form-div-top">
<form class = "form-div-inner-top">
<span class = "input-group input-group-name">
<input type = "text" placeholder = "Name" class = "form-input" required> </input>
</span>
<span class = "input-group input-group-email-address">
<input type = "text" placeholder = "Email Address" class = "form-input" required></input>
</span>
<span class = "input-group description-of-product-desired">
<input type = "textarea" placeholder = "Description of product desired" class = "form-input" required></input>
</span>
</form>
</div>
</div>
Я пытался добавить .animate()
и .fadeIn()
, но ни один из них не работает. Мой синтаксис неверен? Я неправильно их называю? Переход по-прежнему немедленный.
$(document).ready(function(){
$(".product-suggestion-form-container").click(function(){
$(".form-div-top").toggle()
$(".form-div-top").animate({
duration: 200
});
$(".form-div-top").fadeIn( "slow", function() {
// Animation complete
});
})
});
Просто используйте fadeIn()
отдельно. Вызов toggle()
тоже предотвратит анимацию
Возможно, вам понравится .fadeToggle()... Что-то вроде $(".form-div-top").fadeToggle(800);
, где 800 — задержка в мс. 400 по умолчанию. ;)
@charlietfl идеально
Вы можете проверить это, он использует toggleClass() stackoverflow.com/questions/50874992/…
Вот список анимаций jQuery для изучения.
Метод jQuery toggle принимает продолжительность в миллисекундах в качестве первого аргумента.
$(".form-div-top").toggle(300);
$(document).ready(function(){
$(".product-suggestion-form-container").click(function(){
$(".form-div-top").toggle(300);
})
});
.description-container {
font-family: "Proxima Nova Regular";
}
.form-div-outer {
margin: 10px 0;
}
.product-suggestion-form-container {
border: 1px solid #c6c6c6;
border-bottom: none;
padding: 5px 10px;
display: flex;
justify-content: space-between;
background-color: #f8f7f7;
cursor: pointer;
}
/*initial display*/
.form-div-top {
display: none;
background-color: #f8f7f7;
border: 1px solid #c6c6c6;
}
<script src = "http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class = "description-container">
Fill out the product suggestion and contact us forms below:
</div>
<div class = "form-div-outer">
<div class = "product-suggestion-form-container">
<span class = "form-title">Product Suggestion Form</span>
<span class = "dropdown-arrow"><i class = "fas fa-caret-down"></i>
</span>
</div>
<div class = "form-div-top">
<form class = "form-div-inner-top">
<span class = "input-group input-group-name">
<input type = "text" placeholder = "Name" class = "form-input" required> </input>
</span>
<span class = "input-group input-group-email-address">
<input type = "text" placeholder = "Email Address" class = "form-input" required></input>
</span>
<span class = "input-group description-of-product-desired">
<input type = "textarea" placeholder = "Description of product desired" class = "form-input" required></input>
</span>
</form>
</div>
</div>
От себя могу предложить решение методом toggleClass()
:
...
$(".form-div-top").toggleClass("form-div-top_show");
...
Для активности блока необходимо создать дополнительный класс:
.form-div-top_show {
opacity: 1;
}
А еще нужно добавить правило transition
для плавного появления блока, и заменить display: none
на opacity: 0
:
.form-div-top {
opacity: 0;
background-color: #f8f7f7;
border: 1px solid #c6c6c6;
transition: .5s;
}
$(document).ready(function(){
$(".product-suggestion-form-container").click(function(){
$(".form-div-top").toggleClass("form-div-top_show");
})
});
.description-container {
font-family: "Proxima Nova Regular";
}
.form-div-outer {
margin: 10px 0;
}
.product-suggestion-form-container {
border: 1px solid #c6c6c6;
border-bottom: none;
padding: 5px 10px;
display: flex;
justify-content: space-between;
background-color: #f8f7f7;
cursor: pointer;
}
/*initial display*/
.form-div-top {
opacity: 0;
background-color: #f8f7f7;
border: 1px solid #c6c6c6;
transition: .5s;
}
.form-div-top_show {
opacity: 1;
}
<script src = "http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class = "description-container">
Fill out the product suggestion and contact us forms below:
</div>
<div class = "form-div-outer">
<div class = "product-suggestion-form-container">
<span class = "form-title">Product Suggestion Form</span>
<span class = "dropdown-arrow"><i class = "fas fa-caret-down"></i>
</span>
</div>
<div class = "form-div-top">
<form class = "form-div-inner-top">
<span class = "input-group input-group-name">
<input type = "text" placeholder = "Name" class = "form-input" required> </input>
</span>
<span class = "input-group input-group-email-address">
<input type = "text" placeholder = "Email Address" class = "form-input" required></input>
</span>
<span class = "input-group description-of-product-desired">
<input type = "textarea" placeholder = "Description of product desired" class = "form-input" required></input>
</span>
</form>
</div>
</div>
Попробуйте использовать
slideToggle()
, чтобы получить эффекты слайдинга и слайдинга, а также избавиться от анимации и переключения. Использовать их все вместе не правильно