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

sxkk20082年前知识分享216
目录

前言

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

实现逻辑

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

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

相关文章

绿米智能家居系统:AI技术引领未来智慧生活的创新巨擘

绿米智能家居系统:AI技术引领未来智慧生活的创新巨擘

  随着科技的飞速发展,智能家居已成为时代的新潮流。作为智能家居领域的重要参与者,绿米智能家居系统凭借其卓越的创新能力和出色的用户体验,已经成为业内的佼佼者。该系统以其全方位...

AI人工智能绘画:催生全新艺术领域

AI人工智能绘画:催生全新艺术领域

  随着人工智能技术的飞速发展,越来越多的领域开始探索智能化的应用。在艺术领域,AI人工智能绘画也逐渐展现出其无穷的潜能。它不仅能够自动生成艺术作品,还能够辅助人类艺术家创作...

全AI绘画:人工智能时代的创新潮流

全AI绘画:人工智能时代的创新潮流

  在过去几年中,人工智能技术的兴起已经重新定义了人类的生活方式。从智能助理到自动驾驶汽车,从智能穿戴设备到虚拟现实,AI正在悄悄地逐步改变着我们的日常生活。而在艺术领域,A...

人工智能与大数据融合:为未来赋能

人工智能与大数据融合:为未来赋能

  随着信息化时代的不断深入,人工智能(AI)和大数据成为了当前信息技术领域的重要趋势。在运用上,两者相互交织,紧密融合,使得传统的信息交互变得无限可能。如今,随着5G、云计...

AI技术与个人隐私:如何平衡数据驱动和隐私保护

AI技术与个人隐私:如何平衡数据驱动和隐私保护

  人工智能技术通过收集和分析大量的个人信息和行为数据,为用户提供了更好的产品和服务,并且也帮助企业实现更高的商业价值。但是,随着AI技术的不断发展,隐私成为了越来越重要的话...

发表评论    

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