Анимации на сайте с jQuery без плагинов
Сегодня почти каждый сайт использует анимации. Даже если это что-то простое: плавное появление текста, прокрутка к нужному блоку, смена картинок или подсветка кнопки при наведении. И хотя сейчас в моде CSS-анимации, у многих проектов по-прежнему стоит jQuery. И там удобно делать анимацию прямо в коде без дополнительных библиотек и плагинов.
В этой статье разберём, как работать с анимациями в jQuery: от самых простых эффектов до своих собственных сценариев. Всё — без сторонних плагинов. Я постараюсь писать простым языком и приводить примеры, которые можно вставить в проект и сразу попробовать.
Зачем вообще нужны анимации
Анимация помогает оживить сайт. Вот несколько причин, почему это удобно:
-
Подсказки для пользователя. Когда что-то меняется плавно, это понятно глазу. Например, кнопка стала зелёной при наведении.
-
Фокус внимания. Всплывающее окно с формой регистрации лучше заметно, если оно появляется плавно, а не резко.
-
Чисто эстетика. Даже мелкие эффекты вроде fadeIn делают интерфейс приятнее.
-
Навигация. Анимация прокрутки к нужному блоку помогает понять, где ты находишься.
Но перебарщивать не стоит. Если всё мигает и двигается, сайт утомляет.
Что умеет jQuery из коробки
В jQuery уже есть набор встроенных методов для анимации. Самые популярные:
-
.show()
,.hide()
,.toggle()
-
.fadeIn()
,.fadeOut()
,.fadeToggle()
-
.slideDown()
,.slideUp()
,.slideToggle()
-
.animate()
— для кастомных анимаций
Этих методов хватает, чтобы сделать 80% эффектов на сайте.
Подключение jQuery
Для начала нужен сам jQuery. Подключить можно через CDN:
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
Теперь можно писать код. Лучше класть скрипт внизу страницы или оборачивать его в $(document).ready()
, чтобы он запускался только после загрузки DOM:
$(document).ready(function() {
// тут наш код
});
Простое появление и скрытие
.show()
и .hide()
<button id="hide">Скрыть</button>
<button id="show">Показать</button>
<div id="box" style="width:200px; height:100px; background:red; margin-top:10px;"></div>
$(document).ready(function(){
$("#hide").click(function(){
$("#box").hide();
});
$("#show").click(function(){
$("#box").show();
});
});
Элемент просто исчезает или появляется.
С анимацией
Методы .show()
и .hide()
принимают параметр speed
. Он может быть числом в миллисекундах или словами "slow"
, "fast"
.
$("#box").hide(1000); // скроется за 1 секунду
$("#box").show("slow"); // плавное появление
Плавное проявление
.fadeIn()
и .fadeOut()
<button id="fadeout">Исчезни</button>
<button id="fadein">Появись</button>
<div id="block" style="width:150px;height:100px;background:blue;margin-top:10px;"></div>
$(document).ready(function(){
$("#fadeout").click(function(){
$("#block").fadeOut(1000);
});
$("#fadein").click(function(){
$("#block").fadeIn(1000);
});
});
Разница в том, что здесь меняется прозрачность (opacity
).
Переключатель
$("#block").fadeToggle(800);
При каждом клике элемент будет то появляться, то исчезать.
Сдвиги
.slideDown()
и .slideUp()
Часто применяют для меню или аккордеонов.
<button id="menuBtn">Меню</button>
<ul id="menu" style="display:none; background:#eee; padding:10px;">
<li>Главная</li>
<li>О нас</li>
<li>Контакты</li>
</ul>
$(document).ready(function(){
$("#menuBtn").click(function(){
$("#menu").slideToggle(500);
});
});
Меню плавно открывается и закрывается.
Универсальный метод .animate()
Если нужно менять не прозрачность или высоту, а любые CSS-свойства — пригодится .animate()
.
Синтаксис:
$(selector).animate({ свойства }, скорость, функция);
Пример:
$("#box").animate({
left: '250px',
opacity: '0.5',
height: '150px',
width: '150px'
}, 1000);
Тут за 1 секунду элемент переместится вправо, уменьшится и станет полупрозрачным.
Очередь анимаций
Можно ставить эффекты друг за другом:
$("#box").animate({height: "300px"}, 500)
.animate({width: "300px"}, 500)
.animate({opacity: 0.3}, 500);
jQuery выполнит их по очереди.
Остановка
Иногда нужно прервать анимацию, если пользователь кликает слишком быстро. Для этого есть .stop()
:
$("#box").stop().slideToggle(500);
Колбэки
Каждый метод может принимать функцию, которая выполнится после завершения анимации.
$("#box").fadeOut(1000, function(){
alert("Элемент исчез");
});
Практические сценарии
1. Аккордеон для текста
<h3 class="title">Заголовок 1</h3>
<div class="content">Текст блока 1</div>
<h3 class="title">Заголовок 2</h3>
<div class="content">Текст блока 2</div>
$(".content").hide();
$(".title").click(function(){
$(this).next(".content").slideToggle(500);
});
2. Плавная прокрутка к блоку
<a href="#about">О нас</a>
<div id="about" style="margin-top:1000px;">Контент о нас</div>
$("a[href^='#']").click(function(e){
e.preventDefault();
let target = $($(this).attr("href"));
$("html, body").animate({
scrollTop: target.offset().top
}, 800);
});
3. Подсветка кнопки при наведении
<button class="hoverBtn">Кнопка</button>
$(".hoverBtn").hover(
function(){
$(this).animate({backgroundColor: "#ff0000"}, 300);
},
function(){
$(this).animate({backgroundColor: "#008000"}, 300);
}
);
Важно: стандартный
.animate()
не умеет цвета, только числа. Для цветов нужен jQuery UI или костыль через CSS. Проще сделать это на CSS. Но для примера показал.
4. Слайд-шоу
<div id="slider">
<img src="img1.jpg" style="display:block;">
<img src="img2.jpg" style="display:none;">
<img src="img3.jpg" style="display:none;">
</div>
let i = 0;
let images = $("#slider img");
setInterval(function(){
$(images[i]).fadeOut(1000, function(){
i = (i + 1) % images.length;
$(images[i]).fadeIn(1000);
});
}, 3000);
Ограничения
-
jQuery не умеет сложные 3D-эффекты.
-
Цвета и трансформации (
rotate
,scale
) — лучше делать на CSS. -
На очень больших проектах много jQuery-анимаций может тормозить.
Когда лучше CSS, а когда jQuery
-
CSS — для наведения, плавных переходов, адаптива.
-
jQuery — когда нужно управлять процессом: ставить эффекты в очередь, реагировать на события, делать условия и логику.
Итог
jQuery до сих пор остаётся удобным инструментом для анимации без плагинов.
С помощью .fadeIn
, .slideDown
, .animate
и пары десятков строк кода можно сделать всплывающие окна, аккордеоны, плавную прокрутку, слайдеры.
Главное правило — использовать анимации в меру и там, где они помогают пользователю.