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

sxkk20081年前知识分享95
目录

前言

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

实现逻辑

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

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

相关文章

GPT-3.5 Turbo:下一代人工智能的未来

GPT-3.5 Turbo:下一代人工智能的未来

  人工智能(AI)的发展是许多科学家和工程师一直在关注和研究的话题。毫无疑问,AI已经在很多领域取得了巨大的进展,例如自然语言处理、语音识别、图像识别等领域。然而,随着技术...

虚拟主持:让事件更加生动和互动的必备工具

虚拟主持:让事件更加生动和互动的必备工具

  现代科技的快速发展为各行各业带来了前所未有的创新与变革,而虚拟主持作为其中之一,正逐渐成为各类活动和节目中不可或缺的重要角色。虚拟主持能够通过与观众的互动,提升活动的效益...

电影人工智能:开启新时代的创作与体验之旅

电影人工智能:开启新时代的创作与体验之旅

  随着科技的不断进步和人工智能的快速发展,电影产业正逐渐步入一个崭新的时代。人工智能在电影创作、制作、展示和观赏等方面的应用逐渐成熟,为电影行业带来了前所未有的变革和机遇。...

2022 年终总结,知识沉淀这一年

Hello ,大家好,我是Ai知识分享,一名小厂前端工程师,普通的不能再普通的小前端,本来不想写年终总结了,因为一年下来,也没啥变化,看到别人发年终总结文章,实在是自愧不如。后来想了想还是得总结下,写...

MDX 让 Markdown 步入组件时代

前言在 MDX 出现之前,将 JSX 与 Markdown 混合书写时,Markdown 的优势就不存在了。 通常采是用基于模板字符串的方式,因此就需要大量的转义和繁琐的语法。MDX 试图让书写 Ma...

AI检测技术的应用与前景展望

AI检测技术的应用与前景展望

  随着人工智能技术的不断发展,AI检测在各个领域中发挥着越来越重要的作用。AI检测可以应用于医疗、交通、安防等方面,为人们的生活带来了许多便利。本文将探讨AI检测技术的应用...

发表评论    

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