Animate
Информация в данном разделе актуальна для jQuery версии 1.8 и выше. Если вас заинтересуют возможности расширения для более старых версий, читайте мою статью «Пишем плагины анимации».
Для начала затравка – метод animate()
манипулирует объектом jQuery.Animation
, который предусматривает следующие точки для расширения функционала:
jQuery.Tween.propHooks
jQuery.Animation.preFilter
jQuery.Animation.tweener
Начну рассказ с jQuery.Tween.propHooks
, т.к. уже есть плагины, в код которых можно заглянуть :) Для пущей наглядности я возьму достаточно тривиальную задачу – заставим плавно изменить цвет шрифта для заданного набора элементов:
Приведенный выше код не даст никакого эффекта, т.к. «из коробки» библиотека свойство color
не анимирует, но это можно исправить – надо лишь прокачать jQuery.Tween.propHooks
:
Этот код ещё не работает, это наши кирпичики, с их помощью будем строить нашу анимацию. Перед работой стоит заглянуть внутрь каждого из приведённых свойств:
В консоли у нас будет очень много данных, т.к. приведённый метод вызывается N раз в зависимости от продолжительности анимации, при этом «tween.pos» постепенно наращивает своё значение с 0 до 1. По умолчанию наращивание происходит линейно, если надо как-то иначе, то стоит посмотреть на easing плагин или дочитать раздел до конца (об этом я уже упоминал в главе Анимация).
Даже при таком раскладе мы уже можем изменять выбранный элемент (путём манипуляций над tween.elem
), но есть более удобный способ – можно установить свойство «run
» объекта tween
:
Получившийся код будет работать следующим образом:
единожды будет вызвана функция
set()
функция
run()
будет вызвана N раз, при этомprogress
будет себя вести аналогичноtween.pos
Теперь, возвращаясь к изначальной задаче по изменению цвета, можно наворотить следующий код:
Код функций
parseColor()
иbuildColor()
вы найдёте в листинге на странице color.html.
Результатом станет плавное перетекание исходного цвета к красному (#F00
== #FF0000
== (255, 0, 0)
), вживую можно посмотреть на странице color.html:
В плагине jQuery Color для решения поставленной задачи использовали jQuery.cssHooks, но мы же не ищем лёгких путей.
Ещё хотел было рассказать про префильтры анимации, но документации нет, а как использовать «в жизни», я не догадался, но чуть-чуть информации-таки накопал (код можно найти в функции Animation
):
Пример можно пощупать на странице animate.prefilter.html:
Про jQuery.Animation.tweener
также много не расскажешь, но пример получилось сделать чуток интересней – приведённый код позволяет анимировать ширину и высоту объекта по заданной диагонали:
Осторожно, для понимания происходящего потребуются знания геометрии за 8-й класс.
Пример работы animate.tweener.html:
Last updated