Афоризм
Идут года, мне все еще за тридцать.
Наталья Резник
Последние статьи

 • Активности Android
Многоэкранные Android приложения
 • Fragment dynamic
Динамическая загрузка фрагментов в Android
 • Fragment lifecycle
Жизненный цикл Fragment'ов в Android
 • Fragment example
Пример Fragment'ов в Android
 • Data Binding
Описание и пример Data Binding
 • Пример MVVM
Пример использования MVVM в Android
 • Компонент TreeTable
Описание компонента TreeTable для Swing
 • Пример TreeTable
Пример использования TreeTable
 • Хранилища Android
Внутренние и внешние хранилища данных
 • Пример SQLite
Пример использования SQLite в Android
 • WebSocket
Описание и пример реализации WebSocket
 • Визуальные компоненты
Улучшен компонент выбора даты из календаря
 • Анимация jQuery
Описание и примеры анимации элементов DOM
 • APK-файл Android
Создание apk-файла для android устройств, .dex файлы
 • платформа JaBricks
Платформа OSGi-приложения JaBricks
Поддержка проекта

Если Вам сайт понравился и помог, то будем признательны за Ваш «посильный» вклад в его поддержку и развитие
 • Yandex.Деньги
  410013796724260

 • Webmoney
  R335386147728
  Z369087728698
Перейти к содержанию jQuery

Метод анимации animate библиотеки jQuery

Библиотека jQuery задумывалась как средство создания анимации на WEB-странице путем изменения прозрачности элементов DOM, использования выдвигающихся вниз элементов управления меню и т.д. На странице описания базовой анимации представлены простейшие механизмы изменения прозрачности и подсветки элементов, скрытия элементов (hide, show, hover), раскрытия текста (spoiler), а также использования callback-функций.

В данной статье продолжим описания анимационных функций библиотеки jQuery и рассмотрим метод animate, позволяющий плавно управлять свойствами выбранных селектором элементов. Здесь представлены следующие возможности метода animate :

Описание метода animate

Метод animate, выполняющий плавное изменения CSS-свойств элементов, имеет два варианта использования :

  1. animate(properties, [duration], [easing], [callback])
    • properties – список анимирующих CSS-свойств, их конечные значения;
    • duration – продолжительность выполнения анимации, измеряемая в миллисекундах или определяемая строковыми значениями 'fast' (200 мс), 'slow' (2600 мс);
    • easing – изменение скорости анимации с замедлением к концу выполнения или ускорением;
    • callback – функция обратного вызова, вызываемая после завершения анимации.
  2. animate(properties, options)
    • properties – список анимирующих CSS-свойств, их конечные значения;
    • options – дополнительные опции в формате ключ:значение; варианты опций:
      • duration – продолжительность выполнения анимации, измеряемая в миллисекундах или определяемая строковыми значениями 'fast' (200 мс), 'slow' (2600 мс);
      • easing – изменение скорости анимации с замедлением к концу выполнения или ускорением;
      • complete – вызываемая после завершения анимации функция;
      • step – вызываемая после каждого шага анимации функция;
      • queue – логическое значение, указывающее на необходимость включения текущей анимации в очередь функций (при значении false анимация стартует сразу же, т.е. без включения в очередь);
      • specialEasing – позволяет установить разные значения easing для разных CSS-параметров, определяется в формате ключ:значение (добавлена в jQuery 1.4).

В наименовании CSS-свойства properties используется принцип camelCase, т.е. слитное написание свойства, у которого второе слово начинается с прописной буквы. Подробнее об этом здесь. С методом animate допускается использование следующих свойств properties :

Скрыть свойства properties

backgroundPositionX положение (позиция) фонового изображения по оси X.
backgroundPositionY положение (позиция) фонового изображения по оси Y.
borderWidth ширина границ элемента.
borderBottomWidth ширина нижней границы.
borderLeftWidth ширина левой границы.
borderRightWidth ширина правой границы.
borderTopWidth ширина верхней границы.
borderSpacing расстояние между границами соседних ячеек.
bottom определяет смещение позиционированного элемента относительно нижнего края.
fontSize размер шрифта элемента.
height высота элемента.
left определяет смещение позиционированного элемента относительно левого края.
letterSpacing увеличивает или уменьшает интервал между символами в тексте.
lineHeight междустрочный интервал.
margin внешние отступы со всех сторон элемента)
marginBottom внешние отступы с нижнего края элемента.
marginLeft внешние отступы с левого края элемента.
marginRight внешние отступы с правого края элемента.
marginTop внешние отступы с верхнего края элемента.
maxHeight максимальная высота элемента.
maxWidth максимальная ширина элемента.
minHeight минимальная высота элемента.
minWidth минимальная ширина элемента.
opacity прозрачность элемента.
outlineWidth ширина контура элемента.
padding внутренние отступы со всех сторон элемента.
paddingBottom внутренний отступ с нижней стороны элемента.
paddingLeft внутренний отступ с левой стороны элемента.
paddingRight внутренний отступ с правой стороны элемента.
paddingTop внутренний отступ с верхней стороны элемента.
right определяет смещение позиционированного элемента относительно правого края.
textIndent отступ первой строки в текстовом блоке.
top определяет смещение позиционированного элемента относительно верхнего края.
width ширина элемента.
wordSpacing увеличивает или уменьшает пробел между словами в тексте.

Анимация CSS-свойств элементов

Рассмотрим следующий пример простейшей анимации css-свойств элементов методом animate :

Скрыть код примера

<h3>Пример анимации CSS-свойств</h3>

<p id="first">Текст 1-го абзаца
    (<span style="font-style:italic;font-size:0.8em">
	    анимация : padding, border</span>)</p>
<p id="second">Текст 2-го абзаца 
    (<span style="font-style:italic;font-size:0.8em">
	  анимация наведением курсора на текст</span>).</p>

<p id="third">Текст 3-го абзаца 
    (<span style="font-style:italic;font-size:0.8em">
	  анимация : opacity, height</span>)</p>

<script>
$(document).ready(function(){
    // анимация первого абзаца
    $('p').filter('#first').animate({
        padding: '10px',
        borderBottom: '1px solid color:#eee',
        borderLeft: '1px solid color:#eee'
    }, 2000);
    // анимация второго абзаца
    $('p').filter('second').hover(function() {
        $(this).animate({paddingLeft:'+=15px'}, 500);
    }, function() {
        $(this).animate({paddingLeft:'-=15px'}, 500);
    });
    // анимация третьего абзаца
    $('p').filter('#third').animate({
        opacity: 'hide',
        height: 'hide'
    }, 'slow');
});
</script>

На странице размещается заголовок и текст из 3-х абзацев (<p>). В блоке скриптов выполняется анимация каждого из абзацев методом animate. Абзац выбирается селектором с фильтром. Поскольку на странице может быть большое количество различных абзацев, поэтому используем фильтр, выбирающий из этого множества только тот абзац, идентификатор которого соответствует требуемому : например, .filter('#first') – фильтр первого абзаца .

Анимация 1-го абзаца выполняется изменением properties, т.е. css-свойств элемента : padding, borderBottom, borderLeft. Вторым параметром метода .animate указывается время анимации duration 2000 мс, за которое свойство элемента достигнет конечного значения.

Анимация 2-го абзаца выполняется вызовом метода hover, которому в качестве параметров передаются 2 функции. В анонимных функциях выполняется изменение css-свойства paddingLeft методом animate : в качестве конечного значения указывается положительное смещение += при наведении курсора, и отрицательное смещение -= при покидании курсора. Вторым параметром метода animate указывается время анимации duration.

Анимация 3-го абзаца выполняется изменением css-свойств opacity и height; в качестве конечных значений указывается метод hide, обрамленный в одинарные кавычки. Вторым параметром метода .animate указывается время анимации duration, равное slow (2600 мс).

На заметку :
1. При указании конечных свойств CSS-стилей можно использовать значения в пикселах (по умолчанию px), указывать суффикс em или % для соответствующих единиц измерения.
2. Для определенных свойств типа opacity можно также указывать одну из функций hide, show или toggle.
3. duration (число | строка) – необязательный параметр продолжительности анимации в милисекундах или в соответствии с предопределенным значением (slow, normal или fast). Если данный параметр имеет значение отличное от slow и fast, то время действия изменяется со скоростью, соответствующей значению normal (400 мс). При отсутствии данного параметра CSS-свойства изменяются без анимации.

В приведенном примере не представлено включение на страницу самой библиотеки jQuery, о котором можно прочитать здесь, а также об идиоме document–ready.

Реализация примера анимации CSS-свойств

Следующий блок демонстрирует описанный выше пример в действии. Отличия касаются подключения к кнопкам двух анимирующих функций для первого и третьего абзацев, по повторном нажатии которых «состояние элементов восстанавливается».

Пример анимации CSS-свойств

Текст 1-го абзаца (анимация : padding, border)

Текст 2-го абзаца (анимация при наведении курсора на текст).

Текст 3-го абзаца (анимация : opacity, height)

Изменение скорости анимации, easing

В следующем примере в метод animate после описания CSS-свойств properties и времени duration включен параметр easing (linear, swing), определяющий характер скорости анимации. Значение linear определяет равномерную анимацию в течение всего времени. Значение swing определяет неравномерную анимацию : медленное изменение в начале, после чего скорость анимации возрастает, и замедление на конечном этапе анимации. В качестве CSS-свойства в примере используется размер шрифта fontSize.

Скрыть код примера

<h4>Пример изменения скорости анимации</h4>

<p id="easing">Текст абзаца 
    (<span style="font-style:italic;font-size:0.8em">
         анимация : fontSize, easing</span>)</p>
<input type="button" id ="btnFont" value="Увеличить шрифт" 
            style="width:180px" />

<script type="text/javascript">
$(document).ready(function() {
   $('#btnFont').click(function() {
      $('p').filter('#easing').toggleClass('easing');
      if ($('p').filter('#easing').hasClass('easing')) {
         $('p').filter('#easing')
               .animate({fontSize:'+=1.1em'}, 
                  3000, 'linear', 
                  function() {
                      $('#btnFont').val('Уменьшить шрифт');
                  }
                );
      } else {
         $('p').filter('#easing')
               .animate({fontSize:'-=1.0em'},
                  3000, 'swing', 
                  function() {
                      $('#btnFont').val('Увеличить шрифт');
                  }
                );
      }
   });
});
</script>

В представленном примере анимация стартует после нажатия на кнопку. Сначала к элементу абзаца 'easing' добавляется класс методом toggleClass; при повторном нажатии кнопки класс удаляется. Методом hasClass проверяется наличие определенного класса у элемента. Если класс присутствует, то размер шрифта увеличивается методом animate. В противном случае размер шрифта уменьшается. После завершения анимации вызывается callback-функция, передаемая методу animate последним параметром, которая изменяет текст кнопки. Далее представлена реализация примера.

Реализация примера изменения скорости анимации

Следующий блок демонстрирует описанный выше пример в действии. Анимация выполняется после нажатия на кнопку. Скорость увеличения шрифта линейная, а при восстановлениии шрифта используется easing='swing', т.е. замедленные начало и завершение, а в середине скорость анимации повышенная.

Пример изменения скорости анимации

Текст абзаца (анимация : fontSize, easing)

Анимация подсветкой

Анимация подсветкой, или, иначе называемая, цветовая анимация, предполагает изменения цвета шрифта и/или фона элемента. В отличие от рассмотренных выше анимаций, связанных с изменением отступов, прозрачности, размера шрифта, значения которых изменяются линейным способом, для цветовой анимации требуются дополнительные вычисления трех взаимосвязанных значений RGB (red-green-blue) плюс прозрачность, чтобы перевести значения из начального цвета в конечный. В основной библиотеке jQuery функций вычисления цветов нет, поскольку большинству проектов подобная функциональность не требуется. Но данная функциональность присутствует в библиотеке jquery-ui.js, связанной c пользовательским интерфейсом UI (User Interface). В следующем примере мы загрузим на страницу данную библиотеку и рассмотрим анимацию элементов DOM подсветкой шрифта и фона.

В примере загрузка библиотек jquery-1.12.4.js и jquery-ui.js выполняется в первых строках секции <body>. Это работает. Но правильнее было бы, если бы загрузка библиотек помещалась бы в секции заголовка <head>.

Скрыть код примера


<body>
<!-- Загрузка библиотек -->
<script src="https://code.jquery.com/jquery-1.12.4.js"gt;
</script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js">
</script>

<h3>Анимация элемента подсветкой</h3>
<p id="color">Текст абзаца 
  (<span style="font-style:italic;font-size:0.8em">
      анимация : backgroundColor, color, padding</span>)</p>

<input type="button" id ="btnClr" value="Включить подсветку"
       style="width:180px" />

<script type="text/javascript">
   $(document).ready(function() {
      $('#btnClr').click(function() {
         // добавление элементу класса color
         $('p').filter('#color').toggleClass('color');
         // проверка у элемента класса color
         if ($('p').filter('#color').hasClass('color')) {
              // выполнение цветовой анимации
              $('p').filter('#color')
                    .animate(
                        {backgroundColor:'#eeddee',
                         color:'#2244ff',
                         padding:'5px'}, 1000);
              $('#btnClr').val('Выключить подсветку');
         } else {
              // восстановление 'состояния' элемента
              $('p').filter('#color')
                    .animate(
                        {backgroundColor:'#d0fdff',
                        color:'black',
                        padding:'0px'}, 1000);
              $('#btnClr').val('Включить подсветку');
         }
      });
  });
</script>

</body>
 

Интерфейс примера анимации подсветкой, представленный ниже, включает заголовок, текст из одного абзаца и кнопку, нажатием на которую выполняется цветовая анимация : изменяется фоновый цвет backgroundColor, цвет шрифта color и отступы от границ абзаца padding. Время анимации составляет 1000 мс. При повторном нажатии состояние абзаца «восстанавливается». Текст кнопки отражает наименование предстоящей анимации. Обратите внимание, что, текст кнопки изменяется одновременно со стартом анимации. Чтобы текст кнопки изменялся после завершения анимации необходимо использовать callback-функцию.

Реализация примера анимации подсветкой

Анимация элемента подсветкой

Текст абзаца (анимация : backgroundColor, color, padding)

Продолжение статьи связано с использованием выскакивающих панелей и опций метода animate.

Связанные страницы

Описание библиотеки jQuery
Выбор элементов из объектной модели документа DOM
Фильтрация наборов и поиск элементов jQuery методами filter, find
Базовая анимация библиотекой jQuery Выскакивающие панели и опции метода animate Анимированная навигация jQuery
  Рейтинг@Mail.ru