在 React JS 中实现丝滑滚动
你好👋,
在本教程中,我们将在 ReactJS 中使用自定义滚动条为整个页面实现平滑🧈滚动效果🤩。
这是演示
👇 https://react-smooth-scroll.vercel.app/
(由于加载大量图像,最初加载速度可能会较慢)
现在让我们开始吧!
如果您更喜欢视频格式,那么这里就是视频👇
如果您不是初学者,并且想要在项目中实现平滑滚动,您可以直接转到步骤 2。
步骤 0:项目初始化
打开命令提示符。
使用以下命令创建您的项目目录。
npx create-react-app react-smoothscroll
Create React App ( CRA ) 是官方支持的创建单页 React 应用的方式。它提供了无需配置的现代化构建设置。
这将创建并响应应用程序启动器并安装 React 所需的所有依赖项。
对于这个项目,我们将使用Smooth-scrollbar,所以让我们安装它,
npm install smooth-scrollbar
现在让我们启动我们的项目服务器,
写入,
npm start
这将在端口 3000 上启动服务器。
步骤 1:添加随机图像
首先清理您的App.js
文件并删除标题部分。
现在,在实现平滑滚动之前,我们需要在应用程序中显示一些内容。
为此,我们可以逐一渲染几张图像,
您可以从这里获取各种图像:https://picsum.photos/
转到给定的网址并向下滚动以列出图像。https
://picsum.photos/v2/list
在您的浏览器中访问此 URL 并查看它的响应
此 URL 将为我们提供图像 URL 列表。
因此,让我们调用这个 url 并渲染一些图像。
打开App.js
文件并写入以下代码👇
import { useEffect, useState } from 'react'; | |
import './App.css'; | |
function App() { | |
const [images,setImages] = useState(); | |
useEffect(() => { | |
fetch('https://picsum.photos/v2/list?limit=10').then(res => res.json()) | |
.then(json => { | |
console.log(json); | |
setImages(json); | |
}); | |
},[]) | |
const random = () => { | |
return Math.floor(Math.random()*50); | |
} | |
return ( | |
<div className="App"> | |
<h1 className="title">React Smooth Scroll</h1> | |
{ | |
images && images.map( | |
img => <div style={{marginLeft:`${random()}rem`}} key={img.id} className="imgContainer"> | |
<img src={img.download_url} alt={img.author} /> | |
</div> | |
) | |
} | |
</div> | |
); | |
} | |
export default App; |
行号:6👉在这里我初始化了一个状态images
来存储图像。
第 8 行👉useEffect
我获取了提供 JSON 格式图像数据的 URL。将响应 (res) 转换为 JSON 后,我们将使用此 JSON 数据设置图像状态。
JSON数据的格式:
[
{
"id": "0",
"author": "Alejandro Escamilla",
"width": 5616,
"height": 3744,
"url": "https://unsplash.com/...",
"download_url": "https://picsum.photos/..."
}
]
第 25 行👉 在 return 语句中,当图像状态不是 undefined 时,我们将使用 map 函数渲染图像。
这里,所有图像都包装在带有类 image 容器的 div 中。
为了让图片在整个页面上保持分散,我使用了随机函数来随机设置其边距。(正如您在演示页面中看到的那样)
行号:27 👉 在 src 中传递 download_url 并在 alt 标签中传递 author 。
在文件中写入以下 css 代码App.css
。
.App {
display:flex;
flex-direction: column;
padding:5rem;
}
.title{
text-transform: uppercase;
align-self: center;
margin-bottom:8rem;
font-size:4vw;
}
.imgContainer{
max-width:50vw;
margin:4rem 0;
}
img{
width:100%;
height:auto;
}
步骤 2:实现平滑滚动
在 src 中创建 components 文件夹。
在组件文件夹中创建名为 SmoothScroll.js 的文件
写下下面的代码,
const Scroll = () => {
return null;
}
export default Scroll;
从 Smooth-scrollbar 导入滚动条。
import Scrollbar from 'smooth-scrollbar';
我们在 useEffect 中初始化它。
以下是添加平滑滚动条的语法,
Scrollbar.init(document.querySelector('#my-scrollbar'), options);
在 init 函数中传递您想要实现平滑滚动的元素。
在第二个参数中,您可以传递此处列出的各种选项,
您还可以在此现场演示中尝试不同的选项,
https://idiotwu.github.io/smooth-scrollbar/
现在让我们将其添加到滚动组件中。
const options = {
damping : 0.07,
}
useEffect(() => {
Scrollbar.init(document.body, options);
return () => {
if (Scrollbar) Scrollbar.destroy(document.body)
} },[])
在 useEffect 中,我们希望在整个页面中创建平滑滚动,因此在第一个参数中传递document.body 。
而在第二个参数中传递我们已经定义的选项。
在 useEffect 的返回中,
当组件卸载时我们将使用方法销毁 Scrollbar 实例destroy()
。
在文件中导入滚动组件,App.js
如下所示,
...
return (
<div className="App">
<h1 className="title">React Smooth Scroll</h1>
<Scroll /> {/*👈 Like this*/}
...
现在我们必须设置身体的高度和宽度,否则这将不起作用。
打开index.css
文件并在正文中添加高度和宽度。
body {
margin: 0;
height:100vh;
width:100vw;
}
正如你所见,它正在发挥作用🤩
步骤 3:添加 Overscroll 插件
现在,如果您想要在有人点击滚动结束时产生发光或弹跳的效果,那么您应该实现 Overscroll 插件。
打开SmoothScroll.js
文件,并从 Smooth-scrollbar 导入此插件。
import OverscrollPlugin from 'smooth-scrollbar/plugins/overscroll';
请参阅下面的代码和解释。
第 8 行👉 Overscroll 插件选项
行号:27 👉 在主选项对象中添加 Overscroll 插件及其选项。
行号:37👉在这里我们使用了Scrollbar.use()方法来使用 Overscroll 插件。
就是这样。现在你可以看到滚动条到达末端时平滑的弹跳。
如果您想实现发光效果,只需取消注释第 16 行的代码并注释掉当前的滚动选项。
您可以从这里使用该库提供的各种方法。
本教程的完整代码👉 https://github.com/codebucks27/react-smooth-scroll
如果您有任何疑问,请在评论中提问
点击以下链接🤩获取更多资源💻(每周更新)👇
https://linktr.ee/codebucks
感谢阅读😄
欢迎访问我的 YouTube 频道: