Для создания веб-страницы с использованием gsap + locomotiveScroll на базе React + Next, вам необходимо выполнить следующие шаги:
Создайте новый проект Next.js с помощью команды
npx create-next-app
, если вы еще этого не сделали.
Установите необходимые библиотеки, используя команду
npm install gsap locomotive-scroll
в корневой директории проекта.
Создайте новый компонент, который будет содержать вашу веб-страницу. В этом компоненте вы можете использовать все необходимые библиотеки и создать плавную прокрутку.
import React, { useRef, useEffect } from 'react';
import { gsap } from 'gsap';
import ScrollTrigger from 'gsap/ScrollTrigger';
import locomotiveScroll from 'locomotive-scroll';
const Page = () => {
const containerRef = useRef(null);
useEffect(() => {
gsap.registerPlugin(ScrollTrigger);
const scroll = new locomotiveScroll({
el: containerRef.current,
smooth: true,
smoothMobile: false,
inertia: 0.75,
// дополнительные настройки Locomotive Scroll можно добавить здесь
});
ScrollTrigger.scrollerProxy(containerRef.current, {
scrollTop(value) {
return arguments.length ?
scroll.scrollTo(value, 0, 0) :
scroll.scroll.instance.scroll.y;
},
getBoundingClientRect() {
return {top: 0, left: 0, width: window.innerWidth, height: window.innerHeight};
},
pinType: containerRef.current.style.transform ? 'transform' : 'fixed'
});
ScrollTrigger.addEventListener('refresh', () => scroll.update());
ScrollTrigger.refresh();
}, []);
return (
<div className="container" ref={containerRef}>
<div className="content">
// здесь можно разместить содержимое вашей страницы
</div>
</div>
);
};
export default Page;
Затем вам нужно добавить этот компонент в ваш файл pages/index.js
(или pages/index.tsx, если вы используете TypeScript):
import React from 'react';
import Page from '../components/Page';
const Index = () => {
return (
<Page />
);
};
export default Index;
Запустите ваше приложение с помощью команды
npm run dev
и проверьте, работает ли плавная прокрутка.
Обратите внимание, что в этом примере используется глобальный объект window, поэтому если вы используете серверный рендеринг, вам нужно будет проверить, что этот код выполняется только на клиенте, чтобы избежать ошибок времени выполнения на сервере.