Анимация на изследователска работа в javascript. Обещаващи JavaScript библиотеки и добавки за анимация

Под термина „анимация“ най-често имаме предвид анимационните филми – „карикатурите“, които обичаме от детството си. Но ако се вгледате в Речник, тогава научаваме, че в превод от френски означава „съживяване“, „оживление“. И тук се оказва, че това значение изненадващо точно пасва не само на филмовата индустрия, но и на уеб технологиите.

Използването на различни анимационни ефекти (преходи, движения, трансформации и т.н.) значително „оживява“ уебсайта, позволява ви да контролирате вниманието на потребителя, превключвайки го към необходимия елемент и давайки определени визуални знаци.

Говорейки за анимация, няма как да не споменем добре познатите 12 принципа, формулирани от аниматорите на студиото Disney, чието използване е изключително важно за разумното и качествена употребаанимационни ефекти.

Говорейки за технологии, които позволяват използването на анимация в уеб страници, можем да подчертаем няколко, но може би нито една от тях не е толкова мощна, колкото . Само преди няколко години технологията за Flash анимация беше страхотен конкурент и много популярна. Но сега изглежда, че тя най-добрите годиниизостава и постепенно се заменя от страниците на уебсайтове с по-мощни и гъвкави Java скриптове. И ако решите да използвате сериозно анимация на уебсайта си, тогава трябва да разчитате на JavaScript. И за да направя интелигентен избор на библиотека, направих днешния преглед.

Dynamics.js Ще започна с Dynamics.js. Това е сериозна и мощна библиотека, която ви позволява да създавате физически точни анимации (като хармонични затихващи трептенияточки върху начална страницасайт). Библиотеката може да управлява свойствата на всеки DOM елемент. Dynamics.js се използва за създаване на менюта, бутони, индикатори за процеси, маркери. В този случай са налични голямо разнообразие от параметри, като честота, декремент на затихване, параметри, характеризиращи еластичността или продължителността на процеса и др.

Cta.js Малката библиотека cta.js е предназначена за създаване на анимационни ефекти от типа „действие-ефект“ на страницата, т.е. задържането или щракването на показалеца на мишката върху обект произвежда специфичен ефект. Много удобен за използване по време на разработка плочки интерфейси, когато щракването върху елемент води до разширяването му като модален прозорец, цяла страница или като слайд на страничната лента.

Beep.js Интересна библиотека, която използва WebAudio API за създаване на музикален синтезатор на страница. Може да се използва при разработването на онлайн учебник по музика или като забавна играчка.

Rainyday.jsНевероятно красив ефект на дъжд с капки различни размери, течаща надолу. Въпреки това, според мен, на големите капки липсва реализъм (може би същата физика, която присъства в Dynamics.js?). Въпреки това съществуващият API ви позволява да създавате свои собствени обекти и да контролирате тяхното поведение, създавайки още по-невероятни ефекти.

Dom-Animator.jsDom-Animator.js е така нареченият " Великденско яйце"(Великденско яйце). Ефектът, който произвежда, не се вижда с „невъоръжено“ око, т.е. за тези, които разглеждат страницата в обикновен прозорец на браузъра. Но тези, които анализират вашия код, ще го видят в конзолата (ако все още не разбирате за какво говорим, тук има видео, което ще изясни всичко).

FamousFamous е управлявана от събития JS библиотека за създаване на модерна анимация. Той има мощно геометрично ядро, което ви позволява да манипулирате различни 3D обекти - точкови и обемни - да прилагате сили и ускорения към тях, да налагате ограничения и да контролирате сблъсъци.

Bounce.js Не е лошо JavaScript библиотеказа създаване на впечатляващи анимации използвайки CSS. Позволява ви да прилагате към обекти различни видоведвижение, въртене, мащабиране и трансформация.

Snabbt.js Лека и бърза библиотека, която според разработчиците произвежда 60 fps дори при мобилни устройства. Използвайки матрици за трансформация, CSS ви позволява да местите, завъртате, мащабирате и извършвате други манипулации с обекти. Освен това ви позволява да прилагате специални ефекти към обекти, които привличат вниманието, които могат да се използват при попълване на формуляри.

RekapiRekapi ви позволява да използвате и двете CSS анимацияключови кадри (правило @keyframes) и DOM анимация с помощта на JavaScript. Тази библиотека ви позволява да създавате доста сложни динамични обекти, като кръгови и линейни диаграми, времеви линии и други елементи на потребителския интерфейс.

ShiftyShifty е библиотека, съдържаща всичко необходимо за пълноценна анимация на ключови кадри (така нареченото „побратимяване“), а броят на обектите може да бъде просто огромен. Това е библиотека от ниско ниво, която може да се използва като ядро ​​за платформи или библиотеки от по-високо ниво. Всъщност Shifty се използва като ядро ​​на гореспоменатия Rekapi.

Здравейте всички! С тази статия откривам поредица от публикации по темата за създаване на анимации в чист javascript.

Защо изобщо правят анимации в чист js?

може да се ужасиш. В крайна сметка има много библиотеки, например любимата ни jQuery. Това е така, но е полезно да можете да пишете чисти анимации в тези ситуации.

  • Създава се малък уеб сайт с минимум ефекти. Библиотеките на трети страни не са включени. И изведнъж има нужда от плавно разтваряне на елемент при щракване. Струва ли си да свържете jQuery заради една такава дреболия!? Много ще се свържат и всъщност ще го направят правилно - в модерен свят 86Kb не представлява интерес за никого. При работа в екип обаче има такива упорити ръководители на екипи, които няма да позволят въвеждането на библиотека на трета страна в проекта поради малка анимация. Така че ще трябва сами да разберете анимацията.
  • Използвани готова библиотека, и не съдържа желания ефект. Например, трябва елементът да се завърти три пъти по посока на часовниковата стрелка, да скочи и след това да се разтвори, преди да изчезне. В такъв случай ще трябва да се разшири библиотекатаи отново ще ви трябва разбиране на основите на организирането на анимационни ефекти.
  • Следователно разбирането как са организирани анимациите за елементи очевидно няма да бъде излишно. В тази статия ще разгледаме основните техники и най-прост пример- нека напишем функция, която може плавно да скрие DOM елемент, намалявайки неговата прозрачност.

    Всъщност такъв подход за прости анимациивече могат да се считат за остарели. По-добре е да правите анимации с помощта на CSS и с използвайки javascriptконтролирайте началото и края на анимацията.

    Ще имаме два файла: index.html и script.js. HTML документът е много прост:

    JS #item(ширина: 300px; височина: 200px; фон: #f9b; поле: 20px; )

    Направихме div 300x200 пиксела, напълнихме го с цвят, направихме го малък маржи присвоен id=item. За сега не ни трябва нищо повече.

    Организация на анимация в javascript.

    Сега нека организираме работата в js. Първо, нека прикачим някакво събитие към нашия div:

    // След зареждане на документа window.onload = function())( // Когато щракнете върху елемент с id=item document.getElementById("item").onclick = function())( // показва предупреждение alert( 1);))

    Няколко коментара за този дизайн. Традиционно поставяме целия javascript код във функция, зададена на събитието window.onload. Така чакаме окончателното зареждане на документа и формирането на DOM - обектен моделдокумент.

    След това, използвайки document.getElementById, получаваме div с id=item и задаваме събитието onclick, което ще задейства предупреждение за проверка. Всъщност, вместо предупреждение, малко по-късно ще поставим тук извикване на функцията за избледняване, която сега ще започнем да разглеждаме.

    И така, какво ни трябва за анимация? Нека се опитаме веднага да измислим интерфейс за функцията, който ще я направи наистина удобна в бъдеще! Ще получите нещо подобно:

    // Функция за разтваряне на елемент: // elem - DOM обект // t - време на анимация // f - брой кадри в секунда функция fade(elem, t, f)( // код)

    Всъщност всяка анимация има елемент, върху който се създава, и време, през което виждаме плавни промени. Но какво да кажем за кадрите в секунда?

    Тук първо трябва да разберете как се появява анимацията като цяло. Анимацията е просто стъпкова промяна във визуално забележима стойност на определен интервал. Тази стойност за нас е свойството opacity - прозрачността на елемента. И ние създаваме интервала, използвайки стандарта javascript функции- setInterval.

    И така, тази функция приема като втори параметър времето в милисекунди, след което трябва да повтори своето изпълнение. Оказва се, че ако напишем:

    SetInterval(function())(alert(1); ), 20);

    тогава ще виждаме предупреждение на всеки 20 милисекунди. Ами ако пишем

    SetInterval(function())(alert(1); ), 50);

    след това на всеки 50 ms.

    Това се отнася много лесно до кадрите в секунда. В една секунда има хиляда милисекунди, което означава, че ако искаме да покажем на човек 50 кадъра в секунда, то 1000 / 50 = 20 ms - на всеки 20 милисекунди трябва да повтаряме действията в интервала.

    Въз основа на горното вече можем да изобразим основния гръбнак на нашата функция:

    Функция fade(elem, t, f)( // кадри в секунда (по подразбиране 50) var fps = f || 50; // време за изпълнение на анимацията (по подразбиране 500ms) var time = t || 500; var timer = setInterval (функция ())( // промяна на непрозрачността // ако анимацията е завършена if(/* проверка */)( // премахване на интервала за изпълнение clearInterval(timer); // и премахване на елемента от документния поток elem.style.display = "няма" ; ) ), (1000 / fps)); )

    Конструкции var fps = f || 50 и var time = t || 500 декларират параметри по подразбиране. Тоест, ако не предадем втория и третия елемент на функцията при извикване, тогава техните стойности ще бъдат равни съответно на 50 и 500.

    Дизайнът на самата организация setInterval също е логичен. Задаваме интервала с честота 1000/fps. След като анимацията приключи, трябва да премахнем този интервал.

    Обърнете внимание на реда elem.style.display = "none"! Тази инструкция е необходима, така че след като непрозрачността на елемента бъде нулирана, тя ще освободи място. Ако това не бъде направено, елементът няма да се вижда, но мястото му ще остане празно - долните елементи няма да се местят там.

    Почти е готово!Всичко, което трябва да направим, е да добавим промяна към свойството visible и да проверим за завършване на анимацията.

    Как да организираме промяната правилно свойства на непрозрачност. Математиката тук е елементарна. Имаме време и кадри в секунда. Например време = 2000 и брой кадри в секунда fps = 50. fps = 50 означава, че ще показваме кадър на всеки 1000 / fps милисекунди, т.е. 1000/50 = 20.

    Това означава, че общо ще покажем на потребителя n = време / (1000 / fps) = 2000 / (1000 / 50) = 1000 кадъра. Оказва се, че също трябва да променим стойността на свойството opacity 1000 пъти. Спомнете си, че непрозрачността варира от x0 = 0 до x1 = 1. Общата формула е dx = (x1 - x0) / (време / (1000 / fps)). Казано по-просто, разделяме 1 на 1000 и получаваме 0,001.

    Нека поставим всичко това в код:

    Функция fade(elem, t, f)( // кадри в секунда (по подразбиране 50) var fps = f || 50; // време за изпълнение на анимацията (по подразбиране 500ms) var time = t || 500; // колко общо показване на кадри var steps = време / (1000 / fps); // текуща стойност на непрозрачност - първоначално 0 var op = 1; // промяна на прозрачността на кадър var d0 = op / стъпки; // задаване на интервала (1000 / fps) / / например 50fps -> 1000 / 50 = 20ms var timer = setInterval(function())( // намаляване на текущата стойност на непрозрачност op -= d0; // задаване на непрозрачност на DOM елемента elem.style.opacity = op; // намалете броя на оставащите стъпки на анимацията steps--; // ако анимацията е завършена if(steps