Переключить div в зависимости от значения флажка - с анимацией

У меня есть флажок, который при нажатии показывает/скрывает содержимое div с помощью функции jQuery. Мне нужно, чтобы div скользил вниз (расширяя экран), а не просто появлялся.

JQuery:

<script>
$(function () {
    $('#toggle1').change(function () {                
        $('#details1').toggle(this.checked);
    }).change(); //ensure visible state matches state of checkbox on page load
    });
</script>

Если установлен флажок (toggle1), отображается div (details1) и наоборот. Где разместить эффект анимации?

toggle -> слайдТоггл ()
Rory McCrossan 11.12.2020 11:34

Приятно, что кто-то отредактировал вопрос, а затем проголосовал против, потому что он показывает отсутствие исследований или неясен! Что это за форум? Строка «Я упускаю здесь что-то очевидное» явно пролетела мимо их головы!

PJ Grantham 11.12.2020 17:09

Спасибо, Рори, но slideToggle не работает должным образом. Он игнорирует состояние флажка. Хотя переключатель работает, когда вы щелкаете по флажку, когда страница загружается, отображается div, мне нужно, чтобы он был скрыт и отображался только в том случае, если флажок установлен, что является необязательным параметром, передаваемым на страницу при ее загрузке.

PJ Grantham 11.12.2020 17:16

Вы правы, slideToggle не совсем так работает. Я добавил для вас ответ с примером, который охватывает ваш вариант использования.

Rory McCrossan 11.12.2020 17:21
Поведение ключевого слова "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) для оценки ваших знаний,...
0
4
344
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

slideToggle не работает должным образом. Он игнорирует состояние флажка

Это правда, потому что slideToggle() досадно не принимает логическое значение так же, как toggle(). Таким образом, вам нужно будет проверить состояние флажка и использовать slideDown() и slideUp() отдельно.

Когда страница загружается, отображается div, мне нужно, чтобы он был скрыт и отображался только в том случае, если флажок установлен

В этом случае используйте CSS, чтобы скрыть элементы при загрузке, поскольку для этого не требуется, чтобы страница загружалась первой, как это делает JS. Если вы хотите показывать контент при загрузке без анимации слайдов, используйте show().

Вот полный рабочий пример:

jQuery($ => {
  let $toggle =$('#toggle1').change(e => {    
    $('#details1')[e.target.checked ? 'slideDown' : 'slideUp']();
  })
  
  if ($toggle.is(':checked'))
    $('#details1').show();
});
#details1 {
  display: none;
}
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type = "checkbox" id = "toggle1" checked />
<div id = "details1">Lorem ipsum dolor sit consectetur adipiscing elit</div>

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