Простой переход переключения Div с помощью jQuery

Я пытаюсь установить плавный переход при переключении 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
      });
   })
});

Попробуйте использовать slideToggle(), чтобы получить эффекты слайдинга и слайдинга, а также избавиться от анимации и переключения. Использовать их все вместе не правильно

charlietfl 12.12.2020 20:46

Просто используйте fadeIn() отдельно. Вызов toggle() тоже предотвратит анимацию

Josef Wittmann 12.12.2020 20:46

Возможно, вам понравится .fadeToggle()... Что-то вроде $(".form-div-top").fadeToggle(800);, где 800 — задержка в мс. 400 по умолчанию. ;)

Louys Patrice Bessette 12.12.2020 20:48

@charlietfl идеально

HappyHands31 12.12.2020 20:49

Вы можете проверить это, он использует toggleClass() stackoverflow.com/questions/50874992/…

Rostyk 12.12.2020 20:49

Вот список анимаций jQuery для изучения.

Louys Patrice Bessette 12.12.2020 20:52
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
6
104
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Метод 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>

Другие вопросы по теме