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

Как создать сайт с использованием эффекта параллакс при прокрутке

Узнайте, как создать впечатляющий сайт с эффектом параллакса при прокрутке, следуя этому простому и понятному пошаговому руководству.

Эффект параллакса – это визуальный эффект, когда элементы на веб-странице движутся с разной скоростью при прокрутке. Это позволяет создавать интересные и динамичные эффекты на сайте, делая его более привлекательным для посетителей. В этой статье мы рассмотрим, как создать сайт с использованием эффекта параллакс при прокрутке.

Шаг 1: Подготовка HTML-структуры

Для начала создадим простую HTML-структуру, состоящую из нескольких блоков с разными фоновыми изображениями. Эти блоки будут использоваться для демонстрации эффекта параллакса.

<!DOCTYPE html>
<html>
<head>
  <title>Параллакс-эффект</title>
  <link rel="stylesheet" href="styles.css">
</head>
<body>
  <div class="parallax-block" id="block1"></div>
  <div class="parallax-block" id="block2"></div>
  <div class="parallax-block" id="block3"></div>
</body>
</html>

Шаг 2: Применение CSS-стилей

Теперь нам нужно добавить стили для наших блоков и фоновых изображений. Создадим файл styles.css и добавим следующие стили:

body, html {
  margin: 0;
  padding: 0;
  height: 100%;
}

.parallax-block {
  min-height: 100%;
  background-attachment: fixed;
  background-position: center;
  background-repeat: no-repeat;
  background-size: cover;
}

#block1 {
  background-image: url('image1.jpg');
}

#block2 {
  background-image: url('image2.jpg');
}

#block3 {
  background-image: url('image3.jpg');
}

Здесь мы задаем высоту блоков, а также свойства фона, необходимые для создания эффекта параллакса.

Шаг 3: Добавление JavaScript

Последний шаг – добавить немного JavaScript для управления скоростью прокрутки фоновых изображений. Создадим файл scripts.js и добавим следующий код:

window.addEventListener("scroll", function() {
  const parallaxBlocks = document.querySelectorAll(".parallax-block");
  parallaxBlocks.forEach(function(block) {
    const speed = 0.5;
    const yPos = window.pageYOffset * speed;
    block.style.backgroundPosition = "center " + yPos + "px";
  });
});

Этот код отслеживает событие прокрутки страницы и изменяет позицию фона каждого блока в зависимости от скорости прокрутки.

Не забудьте подключить scripts.js к вашему HTML-файлу:

<script src="scripts.js"></script>

🎉 Теперь у вас есть сайт с эффектом параллакса при прокрутке!

Это базовый пример, который можно модифицировать и развивать, добавляя дополнительные блоки, анимации и другие элементы дизайна. Попробуйте экспериментировать с разными настройками и эффектами, чтобы создать уникальный и интересный сайт.

Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
",""],"correct":1},{"question":"Какой элемент структуры HTML является необходимым для создания эффекта параллакса?","answers":["
","
","
"],"correct":0}]}`; 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() })

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