Как создать анимацию при прокрутке страницы?

У меня есть элемент div:

.ticker {
  overflow: hidden;
  white-space: nowrap;
  font-family:arial black;
  background:linear-gradient(to  top,#232323,#000);
  color:#fff;
  position:fixed;
  top:0px;
  left:0px;
  right:0px;
  font-size:16px;
}
.ticker__track {
  display: inline-block;
  will-change: transform;
  animation: scroll 10s linear infinite;
}
@keyframes scroll {
  from { transform: translateX(0); }
  to   { transform: translateX(-10%); }
}
<div class="ticker">
  <div class="ticker__track">
    <span>На нашем сайте ты найдешь мою авторскую музыку и звуковые эффекты! -  Здесь собрано всё, что нужно для твоего проекта! - </span>
    <span>На нашем сайте ты найдешь мою авторскую музыку и звуковые эффекты! -  Здесь собрано всё, что нужно для твоего проекта! - </span>
    <span>На нашем сайте ты найдешь мою авторскую музыку и звуковые эффекты! -  Здесь собрано всё, что нужно для твоего проекта! - </span>
    <span>На нашем сайте ты найдешь мою авторскую музыку и звуковые эффекты! -  Здесь собрано всё, что нужно для твоего проекта! - </span>
  </div>
</div>

Как сделать так, чтобы при прокрутке страницы элемент становился полупрозрачным?


Ответы (1 шт):

Автор решения: Eugene X

Напрямую насколько мне известно без JS не получится, но ты можешь например выставлять атрибут у BODY в зависимости от скроллинга через JS и взаимодействовать с этим атрибутом через CSS.

const body = document.body;

window.addEventListener("scroll", () => {
  const scrollY = window.scrollY;

  if (scrollY > 500) {
    body.setAttribute("data-scrolled", "deep");
  } else if (scrollY > 100) {
    body.setAttribute("data-scrolled", "medium");
  } else {
    body.removeAttribute("data-scrolled");
  }
});
/* Цвет по умолчанию */
body {
  color: blue;
}

/* Если body имеет атрибут data-scrolled со значением "medium" */
body[data-scrolled="medium"] {
  color: orange;
}

/* Если body имеет атрибут data-scrolled со значением "deep" */
body[data-scrolled="deep"] {
  color: red;
}

Есть ещё один интересный способ тоже с JS, это через CSS Variables. Через него можно мутить всякие там паралаксы и прочее, но он сложнее. Нужно курить документацию что-бы понять как это работает.

// Получаем элемент body
const body = document.body;

// При событии скролла устанавливаем CSS-переменную
window.addEventListener("scroll", () => {
  body.style.setProperty("--scroll-y", window.scrollY);
});
body {
  /* Устанавливаем цвет текста.
     Здесь мы используем переменную --scroll-y в качестве компонента HSL (Например, для Hue). 
     Мы делим значение на 10 и прибавляем 150, чтобы получить диапазон оттенков.
     Максимальное значение для Hue - 360.
     Saturation и Lightness (S и L) остаются фиксированными. */
  color: hsl(calc(var(--scroll-y) / 10 + 150), 70%, 50%);
  transition: color 0.5s; /* Для плавного изменения */
}

/* Пример: цвет текста станет темнее после 500px скролла */
h1 {
  background-color: rgb(0 0 0 / calc(var(--scroll-y) / 500));
}
→ Ссылка