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

sxkk20082年前知识分享164
目录

前言

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

实现逻辑

  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人脸识别网站应运而生,作为一个集中展示人脸识别技术的平台,其不仅融合了科技创新的力量,...

ASR平台:革新性技术赋能语音识别领域的创新

ASR平台:革新性技术赋能语音识别领域的创新

  语音识别技术由于其广泛应用的需求不断增长,ASR平台在此背景下应运而生。ASR(Automatic Speech Recognition,自动语音识别)平台是一种基于...

百度虚拟人:智能交互的新时代

百度虚拟人:智能交互的新时代

  进入21世纪以来,人工智能技术的飞速发展已经催生出了许多强大的虚拟人。而百度虚拟人作为其中的佼佼者,以其卓越的性能和智能交互能力,成为了人们生活中不可或缺的存在。  百度...

智能管家:革新生活品质的智慧助手

智能管家:革新生活品质的智慧助手

  现如今,科技的不断进步带来了许多改变,其中智能管家作为人工智能技术的重要应用之一,正逐渐渗透到人们的生活中。智能管家不仅使生活更加方便和舒适,还提供了更多的可能性与安全保...

幕后英雄:近代AI技术的实战应用

幕后英雄:近代AI技术的实战应用

  人工智能(AI)技术在近年来迅速发展,在各个领域发挥着越来越重要的作用。从智能家居到智能医疗,从智能交通到智能金融,AI技术已经渗透到我们生活的各个方面。在这篇文章中,我...

语音合成技术:改变人机交互方式的创新

语音合成技术:改变人机交互方式的创新

  语音合成技术是一项用来将文本转化为声音的创新技术。随着科技的不断发展,语音合成技术正被广泛应用于各个领域,改变着人机交互的方式。本文将探讨语音合成技术的应用和前景,并对其...

发表评论    

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