|
Анимация в JQuery OTUS
JQuery – набор функций JavaScript, используемый для взаимодействия с HTML. Представляет собой библиотеку, предоставляющую доступ к любому элементу DOM, позволяя не только легко обращаться к атрибутам и содержимому элементов DOM, но и управлять ими. Разработка данной библиотеки ведется командой добровольцев. Она поддерживает удобный API для работы с AJAX.
JQuery часто встречается на практике за счет методов, позволяющих создавать анимацию для процессов на страницах веб-сайтов. Далее предстоит разобраться с самыми популярными из них. Все рассматриваемые далее методы позволяют создавать и настраивать анимационные эффекты в программном коде.
Несколько слов об анимации
Анимация – это базовая функциональность интерактивных элементов веб-дизайна. Внешний вид сайта играет важную роль в привлечении посетителей на постоянной основе. Интерактивность (анимационные эффекты) привлекает больше внимания клиентов в сравнении со «стандартным» дизайном.
Создавать анимацию без JavaScript можно. Пример – через реализации CSS3. Для создания анимации для элементов веб-сайта через HTML5 и CSS3 придется постараться. Можно ускорить соответствующий процесс за счет методов фреймворка JQuery.
Наиболее распространенной задачей при создании веб-сайтов является изменение видимости элемента. Можно скрыть/отобразить компонент через атрибуты CSS display или visibility. JQuery упрощает задачу. Этот фреймворк поддерживает всего две функции – hide и show.
Приведенный выше пример при обработке отобразит и мгновенно уберет элемент. На практике он почти не используется. Чаще всего для animations на сайте используются:
- Растворение – реализовывает процесс постепенного удаления элемента HTML. Достигается результат за счет корректирования свойства opacity.
- Скольжение – реализует постепенное расширение или сжатие элемента HTML.
Для этого необходимо изменять высоту компонента.
Далее предстоит рассмотреть данные эффекты более подробно. JQuery инкапсулирует сложности анимации, предоставляя встроенные методы для решения наиболее распространенных задач веб-дизайна.
Простое сокрытие
Анимации появления компонентов на веб-странице могут быть разными. Первый вариант – это простое сокрытие. Для этого используется метод hide. Он устанавливает в стилях блока значение «display: none». Вот пример, в котором скрывается любой div блок при клике по нему:
Чтобы показать спрятанный блок, необходимо использовать метод show. Если элемент веб-страницы имеет свойство «display: none», потребуется добавить кнопку показа скрытых компонентов. Предыдущий пример с animation будет выглядеть так:
Методы hide и show имеют один параметр. В него допускается передача миллисекунд (1 000 миллисекунд – это 1 секунда), за которое происходит скрытие и показ элемента. Вот так выглядит код с задержкой 1 000, а также закрытием в 2 000:
Здесь для удобства добавлены рамки элементов (строк). Они необходимы для наглядной демонстрации принципов работы «закрытия».
Иногда требуется изменить состояние с «показан» на «спрятан», не выясняя текущее состояние элемента. Для этого используется метод .toggle(). Если элемент скрыт, сработает анимация появления (словно применен метод show). Обратный принцип действия тоже поддерживается.
Скольжение
При использовании hiding и shown (методов hide и show соответственно) animated объект уменьшает ширину и высоту блоков до тех пор, пока не исчезнет. При отсутствии параметров эти операции осуществляются так, что никакой анимации не заметно. Для пользователя компонент просто исчезнет. Если требуется анимация свертывания вверх, в JQuery используются совершенно другие методы:
- slideUP – отвечает за анимацию сокрытия;
- slideDown – анимация появления (showing animate).
Вот так выглядит наглядный пример кода:
SlideDown показывает компонент, раскатывая сверху. Такой результат достигается за счет увеличения высоты блока. SlideUp скрывает его, закатывая наверх. Происходит уменьшение высоты до тех пор, пока в CSS не появится свойство элемента «display: none».
Если необходимо изменить состояние с hidden animate на showing или наоборот без изучения текущего положения компонента, используется .slideToggle(). Он работает аналогично .toggle: если блок спрятан – он будет показан, а если открыт – скрыт.
У рассмотренных методов есть параметр продолжительности. Он принимает значения slow или fast. Первый вариант – медленная работа, второй – быстрая анимация.
Растворение
Растворение достигается за счет изменения прозрачности. В CSS соответствующий параметр называется opacity. Здесь необходимо запомнить следующее:
- для hides animates (скрытие) используется fadeOut;
- для появления (showing) применяется fadeIn.
Если задать этим методам параметры в виде числа – они выступят задержкой в миллисекундах на исполнение применяемых процедур. Вот наглядный пример кода:
FadeOut уменьшает прозрачность, приводя к появлению showing animate. FadeIn увеличивает параметр прозрачности. Это приводит к тому, что блок на веб-страничке постепенно исчезает.
Иногда требуется изменить состояние компонента на экране, не рассматривая его текущее «положение». Для этого используется .fadeToggle(). Соответствующая команда показывает блок, если он был скрыт (словно использовалась «инструкция» fadeout), а также скрывает – когда он отображался (подобно fadeIn).
Собственные эффекты
В JQuery допускается создание «особых» анимационных эффектов. Данная операция реализовывается через animate-method. Он встречается в исходном коде тогда, когда возникает необходимость ни в сокрытии и показе блока, а в создании других эффектов.
Animate имеет несколько параметров:
- в первом происходит передача CSS-набора свойств, которыми в конце должен обладать компонент;
- во втором параметре задается время преобразования (в миллисекундах).
Ниже – пример изменения размеров произвольно заданного прямоугольника. Согласно первоначальной задачи, требуется сделать из него квадрат высотой и шириной 100 пикселей:
На экране появится следующий результат:
В первом параметре допускается использование не только CSS-свойств тех или иных значений. Можно поставить height:=’+=20’. В этом случае высота компонента увеличится на 20 пикселей относительно текущей.
Выше – наглядный пример кода. Он позволит увеличить размер ширины фигуры на 10 пикселей, а высоты – на 20. Происходит это при клике по специально созданной кнопке. Она называется «Увеличить размер».
Далее будут рассмотрены примеры «нестандартных» анимационных эффектов на веб-странице.
По частям
JQuery допускает отображение изображения, применяя animation к отдельным его частям. Сначала «картинка» делится на несколько маленьких.
Данное изображение необходимо поделить на 12 частей размером 150 на 150 пикселей. Они размещаются в 2 ряда по 6 штук. Все изображения каждого ряда располагаются в правом углу страницы:
Код позиционирования выглядит так:
Предложенный пример указывает на то, что все изображения в каждом ряду скрываются и располагаются поверх друг друга, применяя абсолютное позиционирование.
Здесь:
- Заданы два селектора для отбора компонентов классов img_item и img_item2.
- Применяется функция animate к отдельным частям для плавного изменения значения свойства opacity на 1, а left изменяется относительно положения предыдущего фрагмента картинки.
- Анимационные эффекты будут одновременно применяться ко всем частям изображения.
Выше – пример того, что произойдет при обработке заданного кода.
Цепочки
Эффектов, применяемых для компонентов веб-сайта, может быть несколько. В более сложных задачах они соединяются в цепочки:
Цепочки создаются путем вызова animate несколько раз через точечную нотацию.
Grids — демонстрации jQuery Mobile
Платформа jQuery Mobile предоставляет простой способ создания столбцов на основе CSS, которые также могут быть адаптивными.
Основы сетки
Сетки имеют 100% ширину, полностью невидимы (без границ или фона) и не имеют отступов или полей, поэтому они не должны мешать стилям элементов, размещенных внутри них. В контейнере сетки дочерним элементам назначаются
ui-block-a/b/c/d/e
в последовательном порядке, что заставляет каждый «блочный» элемент плавать бок о бок, образуя сетку.
Сетка из двух столбцов
Чтобы построить макет с двумя столбцами (50/50%), начните с контейнера с классом
из ui-grid-a
и добавьте внутрь него два дочерних контейнера с классом ui -block-a
для первого столбца и ui-block-b
для второго. В блоках ниже мы добавляем два класса: ui-bar
, чтобы добавить отступ панели по умолчанию, и ui-bar-a
, чтобы применить стиль фона и шрифта для образца темы панели инструментов «a». Для наглядности рядный 9Атрибут 0007 style=»height:60px» также добавляется к каждой сетке, чтобы установить для каждой стандартную высоту.
Блок A
Блок B
Классы сетки можно применять к любому контейнеру. В следующем примере мы добавляем ui-grid-a
к набору полей
и применяем классы ui-block
к контейнеру каждой из двух кнопок внутри, чтобы растянуть их каждую на 50% ширины экрана. :
Сетки с тремя столбцами
В другой конфигурации макета сетки используется class=ui-grid-b
в родительском элементе и 3 дочерних элемента-контейнера, каждый со своим соответствующим классом ui-block-a/b/c
, для создания трехколоночного макета (33/33/33% ).
Блок A
Блок B
Блок C
И пример сетки из 3 столбцов с кнопками внутри:
Посмотреть другие примеры кнопок в сетках.
Четырехколоночные сетки
Четырехколоночная сетка 25/25/25/25% создается путем указания class=ui-grid-c
в родительском элементе и добавления четвертого блока.
Блок A
Блок B
Блок C
Блок D
Сетка из пяти столбцов
Сетка из пяти столбцов, 20/20/20/20/20% создается путем указания класса = UI-сетка -d
для родителя и добавление пятого блока.
Блок A
Блок B
Блок C
Блок D
Блок E
Многорядные сетки
Сетки предназначены для переноса на несколько рядов элементов. Например, если вы укажете сетку из 3 столбцов (ui-grid-b) в контейнере с девятью дочерними блоками, он будет перенесен в 3 строки по 3 элемента в каждой. Существует правило CSS, чтобы очистить поплавки и начать новую строку, когда 9Виден 0007 class=ui-block-a , поэтому обязательно назначайте классы блоков в повторяющейся последовательности (a, b, c, a, b, c и т. д.), которая соответствует типу сетки:
Блок A
Блок B
Блок C
Блок A
Блок B
Блок C
Блок A
Блок B
Блок C
Класс сетки соло
Платформа добавляет левое и правое поле к кнопкам в сетке (одно исключение: элементы кнопок шириной 100%). Для одной кнопки вы можете использовать контейнер с классом ui-grid-solo
и поместите кнопку в div с классом ui-block-a
, как в примере ниже. Таким образом, кнопка получит тот же запас. Посмотрите другие примеры кнопок в сетках.
Предыдущий
Следующий
Адаптивные сетки
Можно просто взять стандартные сетки и сделать их адаптивными, укладывая блоки сетки на небольшую ширину. Так как мы просто хотим переопределить float и ширину стандартных стилей сетки
max-width
точка останова, чтобы применить стиль с накоплением только как переопределение.
Мы рекомендуем добавить класс (например, my-breakpoint
), чтобы ограничить стили для медиа-запроса, чтобы его можно было применять выборочно. С этого базового старта вы можете дополнительно настроить внешний вид или даже добавить дополнительные точки останова. См. пример пользовательской адаптивной сетки.
/* складываем все сетки меньше 40em (640px) */ @media все и (макс. ширина: 35em) { .my-точка останова .ui-блок-а, .my-точка останова .ui-блок-b, .my-точка останова .ui-блок-c, .my-точка останова .ui-блок-d, .my-точка останова .ui-block-e { ширина: 100%; поплавок: нет; } }
Предустановка точки останова
Чтобы применить предустановленную точку останова к стековым сеткам менее 35em (560 пикселей), добавьте класс .
в контейнер сетки. ui-responsive
Сетка A (50/50)
Блок A
Блок B
Сетка B (33/33/33)
Блок A
Блок B
Блок C 9000 3
Сетка С (25/25/25 /25)
Сетка D (20/20/20/20/20)
Как исправить предупреждение «Устранить ресурсы, блокирующие рендеринг» (полезные советы)
Такие ресурсы, как CSS и JS, обычно блокируют рендеринг по своей природе. Это означает, что они блокируют первую отрисовку вашей страницы, что приводит к более высокой первой отрисовке контента (FCP), самой большой отрисовке контента (LCP) и замедлению времени загрузки. Когда это происходит, Google PageSpeed Insights выдает предупреждение «Устранить ресурсы, блокирующие рендеринг». Чтобы исправить это, Google рекомендует вам доставлять критические JS/CSS встроенные и откладывать остальные.
Предупреждение об устранении ресурсов, блокирующих рендеринг Ниже мы рассмотрим несколько различных способов исправить предупреждение «Устранить ресурсы, блокирующие рендеринг» на вашем сайте WordPress. На самом деле способов больше, чем вы думаете.
- Отключить ненужные ресурсы
- Отложить JS
- Задержка JS
- Работа с jQuery
- Удалить неиспользуемый CSS
- Предварительная загрузка ресурсов
- Уменьшить или переключить плагины/темы
Отключить загрузку ненужных ресурсов
Первое, что вы можете сделать, это отключить загрузку ненужных сценариев. Например, скажем, у вас есть плагин оглавления, но вы используете его только в своих сообщениях. Если он загружается на ваши страницы, в этом нет необходимости, и он может вызвать предупреждения о ресурсах, блокирующих рендеринг. То же самое касается плагинов для контактных форм, плагинов для социальных сетей и т. д. Вы можете отключить скрипты для каждой страницы/публикации с помощью диспетчера скриптов в Perfmatters. Или вы можете сделать еще один шаг и отключить целые плагины в режиме MU.
Самый простой способ отследить что-то, что можно отключить, — проверить URL-адрес с помощью PageSpeed Insights. Посмотрите разделы «Уменьшить неиспользуемый CSS» и «Уменьшить неиспользуемый JS» (если они существуют для вашего сайта). Вы можете сравнить «размер перевода» на ресурсе с «потенциальной экономией». Если значение точно такое же, это означает, что оно на 100% не используется и, скорее всего, может быть отключено (по крайней мере, на тестируемом URL-адресе).
Defer JS
Следующий способ исправить предупреждение «Устранить ресурсы, блокирующие рендеринг» — отложить ваш JavaScript. Это означает, что JavaScript загружается во время синтаксического анализа HTML и будет выполняться после завершения загрузки страницы (когда синтаксический анализатор завершит работу). Думайте об этом, как о том, чтобы сбросить весь JavaScript на дно водопада. Это делается путем добавления атрибута defer к каждому файлу JavaScript.
Вы можете добавить Defer JS на свой сайт WordPress с помощью Perfmatters всего за несколько простых кликов.
Delay JS
Следующий способ исправить предупреждение «Устранить ресурсы, блокирующие рендеринг» — отложить ваш JavaScript. В то время как defer JavaScript отправляет скрипт в конец загрузки страницы, вместо этого вы можете откладывать JavaScript на основе взаимодействия с пользователем. Это может быть отличным способом ускорить отрисовку страницы для Google Lighthouse, когда что-то не нужно прямо сейчас.
Хорошей новостью является то, что вы можете использовать и задержку, и отсрочку одновременно. Если оба применяются к одному и тому же файлу JavaScript, задержка всегда будет иметь приоритет, а отсрочка, по сути, является резервной.
Существует два разных способа отложить выполнение JS на вашем сайте WordPress с помощью Perfmatters:
- Вы можете отложить выполнение отдельных JS-скриптов
- Вы можете отложить все свои JS
Работа с jQuery
jQuery — это библиотека JavaScript в ядре WordPress. Большинство сайтов WordPress используют jQuery для таких вещей, как эффекты, анимация (слайдеры), AJAX (контактные формы) и т. д. Этот файл по своей природе блокирует рендеринг. Другая проблема заключается в том, что скрипт довольно большой (30 КБ+). На многих сайтах jQuery является самым большим скриптом на всем сайте.
Если у вас очень оптимизированный сайт, вы можете отключить jQuery полностью или в определенных областях сайта. Это можно сделать с помощью Менеджера скриптов в Perfmatters. Однако для больших сайтов отключить jQuery просто невозможно. В идеальном мире все будет использовать обычный JavaScript, а не jQuery, но ядро WordPress еще не готово.
Другой вариант, который у вас есть, — использовать параметр Delay All JS в Perfmatters. Это задержит jQuery вместе со всеми другими вашими JS и удалит предупреждение ресурса, блокирующего рендеринг. Это ваш лучший выбор, чтобы попробовать и оптимизировать jQuery.
Однако, если вы используете конструктор страниц, такой как Elementor, иногда использование Delay All JS может работать неправильно, и вам нужно будет добавить исключение для jQuery. К сожалению, вы не можете задерживать jQuery по отдельности, потому что это испортит порядок скриптов. Все должно быть в надлежащем порядке, чтобы функция Delay JS работала должным образом из-за зависимостей.
Еще один вариант — попробовать отложить jQuery. Однако мы обнаружили, что это редко работает для большинства людей.
Последним вариантом является предварительная загрузка jQuery. Однако имейте в виду, что предварительная загрузка такого большого сценария может привести к увеличению общего времени блокировки (TBT).
Удалить неиспользуемый CSS
Следующий способ исправить предупреждение «Устранить ресурсы, блокирующие рендеринг» — удалить неиспользуемый CSS. Разработчики обычно помещают таблицу стилей в очередь только в том случае, если она используется. Однако во многих случаях добавляются дополнительные стили, которые могут не понадобиться. Это приводит к большому количеству неиспользуемого CSS, что замедляет работу вашего сайта WordPress. Это также вызывает предупреждения о ресурсах, блокирующих рендеринг.