Π‘Ρ‚Π°Ρ‚ΡŒΡ

πŸ“˜ Π£Ρ€ΠΎΠΊ 8: Анимации ΠΈ эффСкты Π² jQuery β€” `fadeIn()`, `slideToggle()`, `animate()` ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ

ОглавлСниС

ЦСль: Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ эффСкты ΠΈ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ встроСнных jQuery-ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². ΠŸΠ»Π°Π²Π½Ρ‹Π΅ появлСния, исчСзновСния, Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠΎΠ² ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ — всё это Π΄Π΅Π»Π°Π΅Ρ‚ интСрфСйс приятнСС ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½Π΅Π΅.


πŸ”Ή Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Анимации ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ «ΠΎΠΆΠΈΠ²ΠΈΡ‚ΡŒ» сайт. jQuery ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ простой способ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ эффСкты ΠΊ HTML-элСмСнтам Π±Π΅Π· CSS-Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΉ ΠΈΠ»ΠΈ JavaScript-Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ².

Π‘Ρ€Π΅Π΄ΠΈ самых популярных эффСктов:

  • ΠΏΠ»Π°Π²Π½ΠΎΠ΅ появлСниС/исчСзновСниС элСмСнтов,

  • раскрытиС/сворачиваниС Π±Π»ΠΎΠΊΠΎΠ²,

  • ΠΏΠ»Π°Π²Π½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ², отступов, прозрачности ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… CSS-свойств.


πŸ”Έ Π“Ρ€ΡƒΠΏΠΏΡ‹ эффСктов

ВстроСнныС простыС эффСкты:

  • show() / hide() / toggle()

  • fadeIn() / fadeOut() / fadeToggle() / fadeTo()

  • slideDown() / slideUp() / slideToggle()

Π£Π½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄:

  • animate() — для создания своих Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΉ

πŸ”Έ fadeIn(), fadeOut(), fadeToggle()

Π Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒΡŽ (opacity), ΠΏΠ»Π°Π²Π½ΠΎ появляя ΠΈΠ»ΠΈ скрывая элСмСнты.

$('#box').fadeIn(1000);    // ПоявлСниС Π·Π° 1 сСкунду
$('#box').fadeOut(500);    // Π˜ΡΡ‡Π΅Π·Π½ΠΎΠ²Π΅Π½ΠΈΠ΅ Π·Π° 0.5 сСкунды
$('#box').fadeToggle();    // ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ состояния

МоТно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π² миллисСкундах, ΠΈΠ»ΠΈ строкой: 'slow', 'fast'.


πŸ“Œ ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

<button id="fadeBtn">ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ/ΡΠΊΡ€Ρ‹Ρ‚ΡŒ</button>
<div id="fadeBox" style="display:none; background:#ccc; padding:20px;">
  Π‘Π»ΠΎΠΊ с fade эффСктом
</div>

<script>
  $('#fadeBtn').click(function() {
    $('#fadeBox').fadeToggle(500);
  });
</script>

πŸ”Έ slideDown(), slideUp(), slideToggle()

Π˜Π·ΠΌΠ΅Π½ΡΡŽΡ‚ высоту элСмСнта, создавая эффСкт раскрытия/сворачивания:

$('#panel').slideDown();
$('#panel').slideUp();
$('#panel').slideToggle(400);

πŸ“Œ ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ ΠΊ скрытым элСмСнтам с display: none.


πŸ“Œ ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

<button id="slideBtn">ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ мСню</button>
<ul id="menu" style="display:none;">
  <li>ΠŸΡƒΠ½ΠΊΡ‚ 1</li>
  <li>ΠŸΡƒΠ½ΠΊΡ‚ 2</li>
</ul>

<script>
  $('#slideBtn').click(function() {
    $('#menu').slideToggle();
  });
</script>

πŸ”Έ animate() — кастомная анимация

ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ любой числовой ΡΡ‚ΠΈΠ»ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

  • width

  • height

  • opacity

  • margin

  • padding

  • top, left (Ссли элСмСнт ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½)

$('#box').animate({
  width: '300px',
  height: '150px',
  opacity: 0.5
}, 1000);

πŸ“Œ ΠŸΡ€ΠΈΠΌΠ΅Ρ€: Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠ°

<div id="moveBox" style="width:50px; height:50px; background:red; position:relative;"></div>
<button id="moveBtn">Π”Π²ΠΈΠ³Π°Ρ‚ΡŒ</button>

<script>
  $('#moveBtn').click(function() {
    $('#moveBox').animate({ left: '+=100px' }, 600);
  });
</script>

πŸ”Έ Установка колбэков

Π›ΡŽΠ±ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ колбэком — Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ, которая вызовСтся послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ:

$('#box').fadeOut(500, function() {
  alert('Π‘ΠΊΡ€Ρ‹Ρ‚!');
});

πŸ”Έ ΠžΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΈ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ

Анимации ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ Π² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ:

$('#box')
  .fadeOut(500)
  .fadeIn(500)
  .slideUp(500)
  .slideDown(500);

πŸ”Έ ΠžΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ

Если ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΊΠ»ΠΈΠΊΠ°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π· подряд, Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°ΡΠ»Π°ΠΈΠ²Π°Ρ‚ΡŒΡΡ. Π§Ρ‚ΠΎΠ±Ρ‹ этого ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ — останавливаСм ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅:

$('#box').stop(true, true).slideToggle();
  • ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ true: ΠΎΡ‡ΠΈΡ‰Π°Π΅Ρ‚ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ,

  • Π’Ρ‚ΠΎΡ€ΠΎΠΉ true: Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΡŽ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ.


πŸ”Έ ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

1. Анимация роста Π±Π»ΠΎΠΊΠ°

$('#grow').click(function() {
  $('#block').animate({ width: '+=50px', height: '+=20px' }, 300);
});

2. Анимация появлСния с Π·Π°Ρ‚ΡƒΡ…Π°Π½ΠΈΠ΅ΠΌ

$('#open').click(function() {
  $('#modal').fadeTo(400, 1);
});

$('#close').click(function() {
  $('#modal').fadeTo(400, 0);
});

πŸ”Έ ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ с hover

Анимация ΠΏΠΎ навСдСнию:

$('.card').hover(
  function() {
    $(this).animate({ marginTop: '-10px' }, 200);
  },
  function() {
    $(this).animate({ marginTop: '0px' }, 200);
  }
);

πŸ“‹ ΠŸΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°

  1. Π‘Π΄Π΅Π»Π°ΠΉ Π±Π»ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈ ΠΊΠ»ΠΈΠΊΠ΅ «Ρ€Π°ΡΡ‚Ρ‘Ρ‚» Π² 2 Ρ€Π°Π·Π°.

  2. Π‘ΠΎΠ·Π΄Π°ΠΉ скрытый тСкст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠ»Π°Π²Π½ΠΎ появляСтся ΠΈ исчСзаСт.

  3. ΠŸΡ€ΠΈ Π½Π°Π²Π΅Π΄Π΅Π½ΠΈΠΈ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ — увСличиваСтся Π΅Ρ‘ Ρ€Π°Π·ΠΌΠ΅Ρ€.

  4. Π Π΅Π°Π»ΠΈΠ·ΡƒΠΉ Π°ΠΊΠΊΠΎΡ€Π΄Π΅ΠΎΠ½: ΠΏΡ€ΠΈ ΠΊΠ»ΠΈΠΊΠ΅ Π½Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ — открываСтся тСкст.

  5. Π‘Π΄Π΅Π»Π°ΠΉ модальноС ΠΎΠΊΠ½ΠΎ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠ»Π°Π²Π½ΠΎ появляСтся ΠΏΠΎ ΠΊΠ½ΠΎΠΏΠΊΠ΅.


❗ ЧастыС ошибки

❌ ΠžΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… animate()

βœ… Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ .stop() для контроля:

$('#box').stop().animate(...);

❌ Анимация Π½Π΅ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°

βœ… Для left, top ΡƒΠΊΠ°ΠΆΠΈ position: relative ΠΈΠ»ΠΈ absolute.


❌ НСльзя Π°Π½ΠΈΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ свойства Ρ‚ΠΈΠΏΠ° color (Π² стандартной jQuery)

βœ… НуТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ jQuery UI ΠΈΠ»ΠΈ CSS-ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹ для Ρ‚Π°ΠΊΠΈΡ… свойств.


πŸ“Œ Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Анимации Π² jQuery — это простой способ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΡƒ ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ. Π”Π°ΠΆΠ΅ Π±Π΅Π· CSS ΠΈΠ»ΠΈ слоТных JavaScript-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, Ρ‚Ρ‹ моТСшь ΠΎΠΆΠΈΠ²ΠΈΡ‚ΡŒ интСрфСйс всСго Π² ΠΏΠ°Ρ€Ρƒ строк.

Для ΠΎΡ‚Π²Π΅Ρ‚Π° Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ