Привет, мир!
Позвольте мне показать вам, как мы можем создать заголовок, который сжимается при прокрутке вниз и расширяется при прокрутке обратно к вершине.
Мы можем прослушивать прокрутку с помощью слушателей событий. Мы должны начать прослушивать прокрутку, когда компонент монтируется, и прекратить прослушивание, когда компонент размонтируется. Для этого мы можем использовать хуки useEffect.
useEffect(() => { // Adding the scroll listener window.addEventListener('scroll', handleScroll, { passive: true }); return () => { // Removing listener window.removeEventListener('scroll', handleScroll); }; }, []);
Passive используется для обозначения того, что событие является пассивным, и обработчик не будет вызывать preventDefault для отключения прокрутки.
Чтобы узнать, прокручивается страница или нет, мы можем использовать флаг isScrolled . Флаг isScrolled должен быть установлен в true, когда экран прокручивается за определенную точку (например, 250) и в false, когда прокрутка возвращается к вершине (когда позиция прокрутки меньше 250). Мы можем отслеживать позицию прокрутки с помощью window.pageYOffset .
Таким образом, функция-обработчик будет выглядеть следующим образом:
// Flag, which stores whether the screen is scrolled const [isScrolled, setScrolled] = useState(false); // Handler when page is scrolled const handleScroll = () => { if (window.pageYOffset > 250) { setScrolled(true) } else { setScrolled(false) } }
Теперь мы можем определить, прокручивается страница или нет, используя флаг isScrolled. Теперь мы можем реализовать разметку компонента заголовка следующим образом:
return ( <div className = {`header-container ${isScrolled && 'header-scrolled'}`}> <h1>SR</h1> <h2>Sriram</h2> </div> );
Здесь мы внедряем класс header-scrolled, когда экран прокручивается. То есть когда флаг isScrolled равен true.
Давайте посмотрим на стилизацию компонента:
.header-container { display: flex; align-items: center; background: $header-color; box-shadow: rgba(0, 0, 0, 0.2) 0px 12px 28px 0px, rgba(0, 0, 0, 0.1) 0px 2px 4px 0px, rgba(255, 255, 255, 0.05) 0px 0px 0px 1px inset; height: 7rem; } .header-scrolled { height: 3rem; }
Здесь в классе header-container высота установлена на 7rem . Когда страница прокручивается и вводится класс header-scrolled, высота будет заменена на 3rem , что приведет к уменьшению заголовка по вертикали.
Но переход от роста к уменьшению теперь будет резким. Мы можем добавить некоторый переход в CSS, чтобы сделать рост/уменьшение плавным.
.header-container { display: flex; align-items: center; background: $header-color; box-shadow: rgba(0, 0, 0, 0.2) 0px 12px 28px 0px, rgba(0, 0, 0, 0.1) 0px 2px 4px 0px, rgba(255, 255, 255, 0.05) 0px 0px 0px 1px inset; height: 7rem; // To make the grow/shrink smooth. transition: height 2s; }
Вот и все, мы закончили! Теперь при прокрутке экрана заголовок будет плавно увеличиваться и уменьшаться.
Окончательный код будет выглядеть так:
import React, { useEffect, useState } from "react"; import "./header.scss"; export default function Header() { const [isScrolled, setScrolled] = useState(false); useEffect(() => { window.addEventListener('scroll', handleScroll, { passive: true }); return () => { window.removeEventListener('scroll', handleScroll); }; }, []); const handleScroll = () => { if (window.pageYOffset > 250) { setScrolled(true) } else { setScrolled(false) } } return ( <div className = {`header-container ${isScrolled && 'header-scrolled'}`}> <h1>SR</h1> <h2>Sriram</h2> </div> ); }
Надеюсь, это было полезно для вас. С нетерпением ждем ваших отзывов, спасибо!
Originally published at https://sriram23.hashnode.dev.
29.03.2023 12:59
Turbo - это библиотека JavaScript для упрощения создания быстрых и высокоинтерактивных веб-приложений. Она работает с помощью техники под названием "Turbo Links", которая позволяет перемещаться между страницами сайта без полной перезагрузки страницы.
29.03.2023 12:29
HTML, или HyperText Markup Language , является стандартным языком разметки, используемым для создания веб-страниц. Типы ввода HTML - это различные типы элементов управления формами, которые могут использоваться для сбора информации от пользователей на веб-страницах. Существует множество различных...
29.03.2023 09:49
Услуги PHP-разработки могут быть экономически эффективным решением для компаний, которые ищут высококачественные услуги веб-разработки по доступным ценам. Недорогие решения по разработке PHP на аутсорсинге предлагают компаниям возможность получить доступ к высококлассным знаниям и опыту в области...
28.03.2023 12:46
Современный фронтенд похож на старую добрую веб-разработку, но с одной загвоздкой: страница в браузере так же сложна, как и бэкенд.
28.03.2023 10:02
HTML предоставляет множество тегов для структурирования и организации содержимого веб-страницы. Одним из наиболее часто используемых тегов для отображения списков является тег <ul>. В этом уроке мы рассмотрим, как использовать теги <ul> и <li> для создания неупорядоченных списков на веб-странице.