jQuery метод .slideToggle()

Определение и применение

jQuery метод .slideToggle() позволяет плавно отобразить или скрыть выбранные элементы скользящим движением. Если элемент изначально отображается, то он будет скрыт, если элемент скрыт, то он будет отображен.

Значение CSS свойства display элемента сохраняются и восстанавливаются при необходимости. Например, если элемент имеет значение этого свойства inline, то при отображении элемента, после того как он был скрыт, значение свойства не изменится и будет по прежнему inline.

jQuery синтаксис:

Синтаксис 1.0:

JavaScript
$( selector ).slideToggle() // метод используется без параметров

$( selector ).slideToggle( duration, complete )

duration - Number, или String

complete - Function

JavaScript
$( selector ).slideToggle( { options } ) // option: value (описание ниже)

options - PlainObject

Синтаксис 1.4.3:

JavaScript
$( selector ).slideToggle( duration, easing, complete )

duration - Number, или String

easing - String

complete - Function

Добавлен в версии jQuery

1.0 (синтаксис обновлен в версии 1.4)

Значения параметров

Параметр Описание
duration Строковое или числовое значение, которое определяет, как долго анимация будет продолжаться. Значение по умолчанию 400 (в миллисекундах). Строковые ключевые слова 'fast' и 'slow' соответствуют 200 и 600 миллисекундам соответственно (высокие значения указывают на медленную анимацию, а более низкие на быструю).
easing Ключевое слово (строка), которое опряеделяет кривую скорости для анимации (используется математическая функция - кубическая кривая Безье). Без использования внешних плагинов имеет только два значения - linear (эффект анимации с одинаковой скоростью от начала до конца) и swing (эффект анимации имеет медленный старт и медленное окончание, но скорость увеличивается в середине анимации). Значение по умолчанию swing.
complete Функция, которая будет выполнена после завершения анимации, она вызывается один раз для каждого соответствующего элемента. Внутри функции, переменная this ссылается на DOM элемент к которому применяется анимация.
options
  • duration (по умолчанию: 400).
    Тип: Number, или String.
    Строковое или числовое значение, которое определяет, как долго анимация будет продолжаться (смотри выше).
  • easing (по умолчанию: swing).
    Тип: String.
    Ключевое слово (строка), которое определяет кривую скорости для анимации (смотри выше).
  • queue (по умолчанию: true).
    Тип: Boolean, или String.
    Логическое значение, которое указывает следует ли размещать анимацию в очереди эффектов. Если указано false, то анимация начнется сразу же. С версии jQuery 1.7 опция queue также может принимать строку, в этом случае анимация будет добавлена к очереди, представленной этой строкой. Когда используется пользовательское имя очереди анимации, то она не запускается автоматически, вы должны при этом использовать метод .dequeue( "имя очереди" ), чтобы запустить её.
  • specialEasing.
    Тип: PlainObject.
    Объект, содержащий одно или несколько свойств CSS, определенных параметром свойства и соответствующие им функции замедления. Добавлено в версии 1.4.
  • step.
    Тип: Function( Number now, Tween tween ).
    Функция вызывается для каждого анимируемого свойства каждого анимированного элемента. Эта функция дает возможность изменять Tween Object, чтобы изменить значение свойства, прежде чем оно будет установлено.
  • progress.
    Тип: Function.
    Функция, которая будет вызываться после каждого шага анимации, только один раз для каждого анимированного элемента, независимо от количества анимированных свойств. Добавлено в версии 1.8.
  • complete.
    Тип: Function.
    Функция (callback), которая будет выполнена после завершения анимации, она вызывается один раз для каждого соответствующего элемента (смотри выше).
  • start.
    Тип: Function (Promise Object animation).
    Функция, вызывается, когда анимация элемента начинается. Добавлено в версии 1.8.
  • done.
    Тип: Function (Promise Object animation, Boolean jumpedToEnd).
    Функция вызывается, когда анимация элемента завершается. Добавлено в версии 1.8.
  • fail.
    Тип: Function (Promise Object animation, Boolean jumpedToEnd).
    Функция вызывается, когда анимацию элемента не удается завершить. Добавлено в версии 1.8.
  • always.
    Тип: Function (Promise Object animation, Boolean jumpedToEnd).
    Функция вызывается, когда анимация элемента завершается или останавливается незавершенной. Добавлено в версии 1.8.

Пример использования

Пример использования jQuery методов .toggle() и .slideToggle() (без параметров)

Нажмите ▶, затем выполните действие из пояснения. Измените JavaScript и запустите пример ещё раз. В редакторе используется jQuery 3.1.1.

index.html
HTML
<button class="toggle">Метод .toggle()</button><button class="slide-toggle">Метод .slideToggle()</button>
<hr />
<div></div>
<div></div>
<div></div>
main.js
JavaScript
$(document).ready(function () {
    $('.toggle').click(function () {
        $('div').toggle()
    })
    $('.slide-toggle').click(function () {
        $('div').slideToggle()
    })
})
style.css
CSS
div {
    display: inline-block;
    width: 75px;
    height: 150px;
    margin-right: 20px;
    background-color: green;
}

В этом примере с использованием jQuery метода .toggle() мы при нажатии на определенную кнопку скрываем, или отображаем выбранные элементы <div> в документе, а и с использованием метода .slideToggle() делаем аналогочиные действия, но при этом высота элемента изменяется плавно - скользящим движением (анимация изменения высоты).

Рассмотрим следующий пример в котором зададим методам .toggle() и .slideToggle() различные значения продолжительности анимации:

Пример использования jQuery методов .toggle() и .slideToggle() (различная скорость анимации)

Нажмите ▶, затем выполните действие из пояснения. Измените JavaScript и запустите пример ещё раз. В редакторе используется jQuery 3.1.1.

index.html
HTML
<button class="toggle">Метод .toggle()</button><button class="slide-toggle">Метод .slideToggle()</button>
<hr />
<div></div>
<div></div>
<div></div>
main.js
JavaScript
$(document).ready(function () {
    $('.toggle').click(function () {
        $('div:first').toggle('slow')
        $('div:nth-of-type(2)').toggle(1000)
        $('div:last').toggle('fast')
    })
    $('.slide-toggle').click(function () {
        $('div:first').slideToggle('slow')
        $('div:nth-of-type(2)').slideToggle(1000)
        $('div:last').slideToggle('fast')
    })
})
style.css
CSS
div {
    display: inline-block;
    width: 75px;
    height: 150px;
    margin-right: 20px;
    background-color: plum;
}

В этом примере с использованием jQuery методов .toggle() и .slideToggle() мы при нажатии на определенную кнопку скрываем, либо отображаем все элементы <div> в документе. При этом первый элемент <div> скрывается, или отображается за 600 миллисекунд (ключевое слово 'slow'), второй элемент за 1000 миллисекунд, а третитй за 200 миллисекунд (ключевое слово 'fast'). Обратите внимание на разницу в анимации, метод .slideToggle() анимирует только высоту элемента, а метод .toggle() ширину, высоту и прозрачность.

Рассмотрим следующий пример в котором зададим методам .toggle() и .slideToggle() не только продолжительность анимации, но и укажем скорость анимации и функцию, которая будет выполнена после завершения анимации:

Пример использования jQuery методов .toggle() и .slideToggle() (с callback функцией)

Нажмите ▶, затем выполните действие из пояснения. Измените JavaScript и запустите пример ещё раз. В редакторе используется jQuery 3.1.1.

index.html
HTML
<button class="toggle">Метод .toggle()</button><button class="slide-toggle">Метод .slideToggle()</button>
<hr />
<div></div>
<div></div>
<div></div>
main.js
JavaScript
$(document).ready(function () {
    $('.toggle').click(function () {
        $('div').toggle(500, 'linear', function () {
            console.log('toggle completed')
        })
    })
    $('.slide-toggle').click(function () {
        $('div').slideToggle(500, 'linear', function () {
            console.log('slideToggle completed')
        })
    })
})
style.css
CSS
div {
    display: inline-block;
    width: 75px;
    height: 150px;
    margin-right: 20px;
    background-color: red;
}

В этом примере с использованием jQuery методов .toggle() и .slideToggle() мы при нажатии на определенную кнопку скрываем, либо отображаем все элементы <div> в документе. При этом мы указали для наших методов продолжительность анимации равную пол секунды (500 миллисекунд), эффект анимации происходит с одинаковой скоростью от начала до конца (linear) и функцию, которая после завершения анимации выводит в консоль браузера информацию о завершении выполнения метода для каждого элемента в наборе совпавших элементов.

Рассмотрим следующий пример в котором передадим в качестве параметра методов .toggle() и .slideToggle() объект, содержащий различные опции, которые будут контролировать анимацию:

Пример использования jQuery методов .toggle() и .slideToggle() (объект с опциями в качестве параметра)

Нажмите ▶, затем выполните действие из пояснения. Измените JavaScript и запустите пример ещё раз. В редакторе используется jQuery 3.1.1.

index.html
HTML
<button class="toggle">Метод .toggle()</button><button class="slide-toggle">Метод .slideToggle()</button>
<hr />
<div></div>
<div></div>
<div></div>
main.js
JavaScript
$(document).ready(function () {
    $('.toggle').click(function () {
        // задаем функцию при нажатиии на элемент с классом hide
        $('div').toggle({
            // плавно скрывыаем элементы <div> в документе
            duration: 800, // продолжительность анимации
            easing: 'linear', // скорость анимации
            complete: function () {
                // callback
                console.log('toggle completed')
            },
            queue: false, // не ставим в очередь
        })
    })
    $('.slide-toggle').click(function () {
        // задаем функцию при нажатиии на элемент с классом show
        $('div').slideToggle({
            // плавно отображаем элементы <div> в документе
            duration: 800, // продолжительность анимации
            easing: 'linear', // скорость анимации
            complete: function () {
                // callback
                console.log('slideToggle completed')
            },
            queue: false, // не ставим в очередь
        })
    })
})
style.css
CSS
div {
    display: inline-block;
    width: 75px;
    height: 150px;
    margin-right: 20px;
    background-color: orangered;
}

В этом примере с использованием jQuery методов .toggle() и .slideToggle() мы при нажатии на определенную кнопку скрываем, либо отображаем все элементы <div> в документе. При этом мы в качестве параметров методов передаем объект содержащий следующие параметры:

  • продолжительность анимации равную 800 миллисекунд (duration: 800)
  • эффект анимации происходит с одинаковой скоростью от начала до конца (easing: linear)
  • функция, которая после завершения анимации выводит в консоль браузера информацию о завершении выполнения метода для каждого элемента в наборе совпавших элементов (complete: function).
  • анимация не размещается в очереди эффектов (queue: false).