使用 React 和 Tailwind 创建阅读进度条

sxkk20082年前知识分享217
目录

前言

我们在上网的时候经常会看到一些优秀的博客顶部有个进度条,这个进度条有助于读者衡量阅读进度,我认为这个功能可以带来良好的用户体验,所以,应该将其添加到我个人博客上的文章中。那么,一起来实现吧。

实现逻辑

  1. 获取页面可以滚动的高度.
  2. 获取页面已经滚动的高度.
  3. 阅读进度=已经滚动的高度/页面可以滚动的高度

代码

单独定义一个 react hook 来活动当前的阅读进度

import { useEffect, useState } from 'react'

export function useReadingProgress() {
  const [progress, setProgress] = useState(0)
  useEffect(() => {
    function updateScroll() {
      // 已经滚动的高度
      const currentScrollY = window.scrollY
      // 可以滚动的高度
      let scrollHeight = document.body.scrollHeight - window.innerHeight
      if (scrollHeight) {
        setProgress(Number((currentScrollY / scrollHeight).toFixed(2)) * 100)
      }
    }
    // 添加全局滚动事件的监听
    window.addEventListener('scroll', updateScroll)

    // 移除监听
    return () => {
      window.removeEventListener('scroll', updateScroll)
    }
  }, [])
  return progress
}

剩下的工作是将进度显示在页面上,为此,我在顶部的导航栏上显示一个进度条。

样式

我的博客使用了 TailwindCSS,用它制作进度条非常容易

export default function ProgressBar() {
  const progress = useReadingProgress()
  return (
    <div
      style={{
        transform: `translateX(${progress - 100}%)`,
      }}
      className="fixed top-0 left-0 h-1 w-full bg-primary-500 backdrop-blur-3xl transition-transform duration-150"
    />
  )
}

我在这里使用 transform 和 translate 属性来制作进度条.

进度为 0 向左偏移 100% ,进度为 100 偏移 0,所以使用 translateX(${progress - 100}%)

以上就是本文全部内容,希望这篇文章对大家有所帮助,也可以参考我往期的文章或者在评论区交流你的想法和心得,欢迎一起探索前端。

相关文章

实现一个编辑器

为了弥补 markdown 的缺点,我使用 mdx 来实现编辑器的功能, mdx 也就是 markdown 语法和 JSX 的结合,关于 MDX 的优势大家可以看下这篇文章

其实最简易的 demo 也是来自于官网的 playground

MDX playground

微信排版工具新选择

MDX Editor 一个好用的排版编辑器前言哈喽,大家好,我是Ai知识分享,去年年底,我开通了微信公众号“JS 酷”,也开始陆陆续续开始写文章, 发到微信公众号,作为一名程序员,我酷爱 Markdo...

专业的教育机构招生代理平台

网站介绍 免责声明 用户协议 网站公告 合作模式 支付方式 合作伙伴 网站地图 相关专题...

PBFT算法:分布式系统一致性与故障容错性能分析

PBFT算法:分布式系统一致性与故障容错性能分析

  PBFT(Practical Byzantine Fault Tolerance)算法是一种高性能的分布式一致性算法,具备良好的故障容错性能。该算法由Miguel C...

百度天工:人工智能的引领者与探索者

百度天工:人工智能的引领者与探索者

  近年来,人工智能技术以其强大的学习和推理能力赢得了广泛关注和应用。在这个领域的先驱者和探索者之一,就是中国科技巨头百度旗下的“百度天工”(Baidu Research...

图片识人:探究人工智能在图像识别领域的应用与发展

图片识人:探究人工智能在图像识别领域的应用与发展

  随着人工智能技术的不断进步,图像识别领域取得了重大突破。其中,图片识人成为了广受关注的焦点。本文将从人工智能的发展背景、图片识人的原理与应用、以及未来的发展趋势等方面进行...

AI养殖技术的应用与发展

AI养殖技术的应用与发展

  随着社会经济的不断发展,农业的生产模式也在发生着革命性的转变,人工智能技术的普及与应用,为农业产业的发展注入了新的活力。在传统养殖方式逐渐被淘汰的情况下,AI(人工智能)...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。