Вебинары Разобраться в IT Реферальная программа
Программирование Аналитика Дизайн Маркетинг Управление проектами
7 профессий по цене одной
07:05:47:06
дн. ч. мин. сек.
18 Апр 2024
2 мин
2513

Как использовать анимацию с помощью JavaScript-библиотеки GSAP

Узнайте, как использовать мощную JavaScript-библиотеку GSAP для создания захватывающих анимаций на веб-страницах, освоив основы и примеры.

GSAP (GreenSock Animation Platform) — это мощная и простая в использовании библиотека JavaScript для создания анимаций на веб-страницах. Эта статья покажет вам, как начать работу с GSAP и создать вашу первую анимацию.

Установка GSAP

Прежде всего, вам нужно установить GSAP. Есть несколько способов сделать это, но самый простой – подключить библиотеку через CDN. Вставьте следующий код в ваш HTML-файл:

<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.7.1/gsap.min.js"></script>

Создание анимации

Теперь, когда у вас установлена GSAP, можно создать анимацию. Допустим, у вас есть элемент на странице с идентификатором my-element, который вы хотите анимировать. Вот как вы можете создать анимацию, которая перемещает элемент на 100 пикселей вправо и изменяет его прозрачность на 50%:

gsap.to("#my-element", {duration: 1, x: 100, opacity: 0.5});

В этом примере используется метод to, который создает анимацию с заданными свойствами. Параметры, передаваемые в метод, включают идентификатор элемента, длительность анимации (в секундах) и объект с анимируемыми свойствами.

💡 Совет: Можно использовать любые CSS-свойства для анимации, просто убедитесь, что они написаны в camelCase (например, backgroundColor вместо background-color).

Работа с таймлайнами

GSAP также предоставляет возможность создавать сложные анимации с помощью таймлайнов. Таймлайн — это последовательность анимаций, которые могут быть сгруппированы, управляемы и расположены в определенном порядке. Вот пример создания таймлайна:

const timeline = gsap.timeline();

timeline.to("#my-element", {duration: 1, x: 100, opacity: 0.5})
        .to("#my-element", {duration: 1, y: 100, backgroundColor: "red"}, "+=1");

В этом примере мы создаем таймлайн и добавляем две анимации: первая перемещает элемент вправо и изменяет его прозрачность, а вторая перемещает элемент вниз, меняет его цвет фона и начинается через одну секунду после окончания предыдущей анимации (+=1).

События и коллбэки

GSAP предоставляет возможность использовать события и коллбэки для управления анимацией. Например, вы можете запустить функцию, когда анимация завершается:

gsap.to("#my-element", {
  duration: 1,
  x: 100,
  opacity: 0.5,
  onComplete: function () {
    console.log("Анимация завершена!");
  }
});

Заключение

GSAP — мощный инструмент для создания анимаций на веб-страницах. В этой статье мы рассмотрели основы работы с GSAP, но возможностей библиотеки гораздо больше. Больше информации и примеров можно найти в официальной документации GSAP.

Не забудьте практиковаться и экспериментировать с анимациями, чтобы стать профессионалом в использовании GSAP! 🚀

Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
","",""],"correct":0},{"question":"Какой CSS-свойство нельзя использовать для анимации в GSAP?","answers":["opacity","backgroundColor","border-radius"],"correct":2},{"question":"Что такое таймлайн в GSAP?","answers":["Целое число","Набор анимаций","Тип анимации"],"correct":1},{"question":"Что произойдет, если использовать свойство 'onComplete'?","answers":["Анимация будет завершена сразу","Должна быть вызвана функция после завершения анимации","Произойдет ошибка"],"correct":1}]}`; const $wrapper = jQuery('.media-article-test__main'); const { data: testData } = JSON.parse(test_data_json); let current = 0; function showForm() { const input = document.querySelector(".media-article-test__form .media-article-test__form-input--phone"); const iti = window.intlTelInput(input, { initialCountry: "ru", strictMode: true, showSelectedDialCode: true, utilsScript: "https://fastly.jsdelivr.net/npm/intl-tel-input@21.2.7/build/js/utils.js", }); jQuery.validator.addMethod("phoneValid", function () { return iti.isValidNumber() }) const $form = jQuery('.media-article-test__form'); $form.css('display', ''); $form.on('submit', (e) => { e.preventDefault(); }) $form.validate({ rules: { phone: { required: true, phoneValid: true }, email: { required: true } }, messages: { phone: { required: "Телефон обязателен", phoneValid: "Введите корректный телефон" }, email: { required: "Почта обязательна", email: "Введите корректный email" } }, focusInvalid: false, submitHandler: async function (form) { const $phone = $form.find('input[name="phone"]').get(0); const $email = $form.find('input[name="email"]').get(0); const $name = $form.find('input[name="name"]').get(0); const utm_campaign = encodeURIComponent(window.location.href.split('?')[0]) const formData = new FormData(); $name.value && formData.append("name", $name.value); formData.append("email", $email.value); formData.append("phone", window.intlTelInputGlobals.getInstance($phone).getNumber()); formData.append("queryParams", `utm_source=skypro_blog&utm_campaign=${utm_campaign}`); formData.append("sourceKey", "skypro_blog_article_test"); formData.append("funnel", "televox"); formData.append("televox_import_group_id", "9111"); $form.addClass("media-article-test__form--loading"); try { await fetch('https://api.sky.pro/api/v1/lead/tilda', { method: 'POST', body: formData, }); jQuery('.media-article-test__success').css('display', ''); try { ym(69215599, "reachGoal", "marketing_lead"); ym(69215599, "reachGoal", "send_any_form"); } catch (e) {} // $modalWrap.css("display", "none"); } catch (e) { // $modal.removeClass("spm-voting__modal--loading"); // jQuery(".spm-voting__form-submit-error").css("display", "block"); jQuery('.media-article-test__form-title').text('Ошибка выполнения запроса!'); } finally { $form.removeClass("media-article-test__form--loading"); jQuery('.media-article-test__form-submit').css('display', 'none'); jQuery('.media-article-test__form .iti').css('display', 'none'); jQuery('.media-article-test__form-input[name="name"]').css('display', 'none'); jQuery('.media-article-test__form-input[name="email"]').css('display', 'none'); } } }) const $testBlock = jQuery('.media-article-test__main'); $testBlock.css('filter', 'blur(10px)'); $testBlock.css('background', 'none'); $testBlock.css('pointer-events', 'none'); $form.css('display', ''); jQuery('.media-article-test').css('min-height', '360px'); jQuery('.media-article-test__title').css('display', 'none'); jQuery('.media-article-test__subtitle').css('display', 'none'); } function render() { const { question, answers } = testData[current] $wrapper.html(`
Вопрос ${current + 1}: ${question}
${current + 1} / ${testData.length}
${answers.map(ans => ` `).join('')}
`); jQuery('.media-article-test__answer').click(() => { jQuery($wrapper).fadeOut(300, function() { if (current < testData.length - 1) { current++; render() } else { showForm() } jQuery(this).fadeIn(300); }); }) } render() })

Добавить комментарий