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

sxkk20082年前知识分享183
目录

前言

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

实现逻辑

  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}%)

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

相关文章

油猴脚本开发教程

highlight: monokai前言如何跟普通朋友介绍前端工程师是一个怎样的职位? 我会毫不犹豫的给他的浏览器装上 Tampermonkey,再装一个去广告插件,他们肯定会觉得你很牛逼,然后再问问...

ChatGPT 以及相关开源项目体验

本月初,ChatGPT 以惊人的速度问世,在技术圈中引起了广泛讨论。在 GitHub 上近期还诞生了多个 ChatGPT 相关的开源项目,数量之多令人瞠目结舌,甚至 ChatGPT 独霸了大半个 Gi...

人工智能技术:利用识图找人功能解决寻人难题

人工智能技术:利用识图找人功能解决寻人难题

  随着科技的不断发展,人工智能在各个领域产生了巨大的影响,包括寻找失踪人口。识图找人技术作为人工智能领域的一个创新应用,正逐渐成为解决寻人难题的有效工具。利用这项技术,我们...

Next.js 应用实现权限管理

文章为稀土掘金技术社区首发签约文章,14 天内禁止转载,14 天后未获授权禁止转载,侵权必究!前言在前面的文章中《使用 NextAuth.js 给 Next.js 应用添加鉴权与认证》,我们使用了 G...

人工智能技术:引领未来智能创新的关键驱动力

人工智能技术:引领未来智能创新的关键驱动力

  在当今科技快速发展的时代,人工智能(AI)技术成为了引领未来智能革命的关键驱动力。人工智能的发展已经深入到各个领域,从医疗保健到金融服务,从交通运输到社交媒体,它正在极大...

AI创作中心助力行业发展:引领绿色生活的创新力量

AI创作中心助力行业发展:引领绿色生活的创新力量

  近年来,人工智能(AI)技术的快速发展为各行各业带来了巨大的改变与机遇。在这个数字化时代,AI创作中心成为引领绿色生活发展的创新力量之一。通过AI技术的广泛应用,园艺行业...

发表评论    

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