Как прокручивать нормально (без прилипаний) в определенном разделе в FullPage.js?

Вопрос или проблема

Я пытаюсь создать веб-сайт, где я могу использовать прокрутку с зацеплением для первых двух секций, а затем прокручивать нормально через длинную секцию (300vh).

Как я могу достичь этого эффекта? Я не нашел ни одного места, которое правильно объясняет это, поэтому мне нужна помощь.

Я пытался использовать scrollOverflow: true;, как упоминается в документации FullPage.js, но прокрутка работает некорректно. Она либо застревает на длинной секции, либо вообще не прокручивается внутри этой секции.

Вот что я попробовал:

document.querySelectorAll('[tabindex]').forEach(function(el) {
  el.removeAttribute('tabindex');
});
body {
  background-color: rgb(39, 39, 39);
  overflow-x: hidden;
}

section {
  height: 100vh;
  width: 100vw;
  display: flex;
  justify-content: center;
  align-items: center;
}

.hero-section {
  background-color: rgb(156, 76, 76);
}

.features-benefits-section {
  background-color: rgb(163, 2, 2);
}

.spacer,
.overflowContainer {
  overscroll-behavior: contain;
  overflow-x: hidden;
  height: 100vw;
  width: 100vw;
}

#scrolling {
  background-color: rgb(162, 134, 134);
  display: flex;
  justify-content: center;
  align-items: center;
  height: 300vh;
  width: 100vw;
}

h1 {
  color: aliceblue;
  font-size: 5rem;
}

new fullpage("#fullpage", {
  autoScrolling: true, scrollHorizontally: true, normalScrollElements:'.scrolling', scrollOverflow:true
}
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>debag</title>
  <link rel="stylesheet" href="https://stackoverflow.com/questions/79031724/style.css">
  <script src="script.js" defer></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/fullPage.js/4.0.29/fullpage.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.11.0/gsap.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.11.0/ScrollTrigger.min.js"></script>
</head>

<body>
  <div id="fullpage">
    <section class="section hero-section">
      <h1>геройская секция</h1>
    </section>
    <section class="section features-benefits-section">
      <h1>секция особенностей и преимуществ</h1>
    </section>
    <section class="section spacer">
      <div class="overflowContainer">
        <div id="scrolling">
          <h1>прокрутка</h1>
        </div>
      </div>
    </section>
    <section class="section">
    </section>
  </div>
</body>

</html>

Ответ или решение

Чтобы реализовать нормальную прокрутку (без фиксированной прокрутки, типа snap) для определенного раздела в FullPage.js, вы можете воспользоваться функцией normalScrollElements и правильно настроить параметры стилей. Вот полное решение вашей задачи:

Шаг 1: Настройки FullPage.js

В вашем коде, вы уже используете normalScrollElements. Давайте убедимся, что у вас правильно прописаны все параметры и активированы необходимые стили.

Шаг 2: Правильные CSS стили

Убедитесь, что у элементов с классом, который вы указываете в normalScrollElements, есть соответствующие стили для нормальной прокрутки, например, overflow: auto. Вот как можно его настроить:

body {
  background-color: rgb(39, 39, 39);
  overflow-x: hidden;
}

section {
  height: 100vh;
  width: 100vw;
  display: flex;
  justify-content: center;
  align-items: center;
}

.hero-section {
  background-color: rgb(156, 76, 76);
}

.features-benefits-section {
  background-color: rgb(163, 2, 2);
}

.spacer {
  overflow: auto; /* Позволяет нормальную прокрутку */
  height: 100vh; /* Задать высоту соответствующим образом */
  width: 100vw;
}

#scrolling {
  background-color: rgb(162, 134, 134);
  display: flex;
  flex-direction: column; /* Чтобы элементы могли располагаться один под другим */
  justify-content: center;
  align-items: center;
  height: 300vh; /* Ваша длинная секция */
  width: 100vw;
}

h1 {
  color: aliceblue;
  font-size: 5rem;
}

Шаг 3: Инициализация FullPage.js

Ваш JavaScript код для инициализации FullPage.js будет выглядеть следующим образом:

new fullpage('#fullpage', {
  autoScrolling: true,
  scrollHorizontally: true,
  normalScrollElements: '.spacer', // Указание области для нормальной прокрутки
  scrollOverflow: true // Возможно, это может быть необходимо для некоторых других элементов
});

Пример HTML структуры

Ваш HTML код будет выглядеть следующим образом:

<!DOCTYPE html>
<html lang="ru">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Прокрутка в FullPage.js</title>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/fullPage.js/4.0.29/fullpage.min.css">
  <script src="https://cdnjs.cloudflare.com/ajax/libs/fullPage.js/4.0.29/fullpage.min.js" defer></script>
</head>
<body>
  <div id="fullpage">
    <section class="section hero-section">
      <h1>Герой секция</h1>
    </section>
    <section class="section features-benefits-section">
      <h1>Секция преимуществ</h1>
    </section>
    <section class="section spacer">
      <div id="scrolling">
        <h1>Скроллинг</h1>
        <!-- Добавьте больше контента здесь для проверки прокрутки -->
      </div>
    </section>
    <section class="section">
      <h1>Последняя секция</h1>
    </section>
  </div>
  <script>
    new fullpage('#fullpage', {
      autoScrolling: true,
      scrollHorizontally: true,
      normalScrollElements: '.spacer',
      scrollOverflow: true
    });
  </script>
</body>
</html>

Итог

Теперь, при прокрутке на секции с классом spacer, вы сможете прокручивать контент нормально, в то время как остальные секции будут вести себя так, как и предполагалось, с помощью snap-подхода. Убедитесь, что у вас достаточно контента внутри .scrolling, чтобы протестировать прокрутку.

Если у вас возникнут дальнейшие проблемы, проверьте консоль браузера на наличие ошибок или конфликтов с другими библиотеками.

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

Капча загружается...