卖坚果的怪叔叔 卖坚果的怪叔叔
  • 首页
  • 生活
  • 技术
  • 记录
  • 工具箱
  • 关于我
首页 › 技术 › React实现打字机效果~

React实现打字机效果~

坚果大叔
2023-08-22 17:31:49技术阅读 4,216

项目中有一个地方用到打字机的效果,并且在文字显示完成之后可以选择是否自动跳转到下一步骤。另外这个打字机效果在多个页面模块中使用,区别是打字完成后是否跳转。

核心代码

useEffect(() => {
    let currentIndex = 0;
    const interval = setInterval(() => {
      if (currentIndex < originalText.length - 1) {
        setText((prevText) => prevText + originalText[currentIndex]);
        currentIndex++;
      } else {
        clearInterval(interval);
        if (destination && destination.trim() !== '') {
          timerRef.current = window.setTimeout(() => {
            navigate(destination);
          }, 1000); // 在1秒后跳转到目标页面
        }
      }
    }, 100);

    return () => {
      clearInterval(interval);
      if (timerRef.current) {
        clearTimeout(timerRef.current);
      }
    };
}, [originalText, destination, navigate]);

在useEffect中,用了一个定时器来逐个字符地将原始文本添加到当前文本中。每100毫秒添加一个字符,直到添加完整个原始文本。然后,我们清除定时器以停止动画。另外引入了useHistory钩子来获取路由的history对象。在useEffect中,当打字机效果完成后,用setTimeout函数来延迟1秒后执行跳转操作。

如何使用

import React from 'react';
import Typewriter from './Typewriter';

const App: React.FC = () => {
  return (
    
); }; export default App;

其中 originalText 是需要打印的文本,destination 是文字打印完后需要跳转的页面。如果打印后停留当前页面则无需该参数。

实际效果

React实现打字机效果~-卖坚果的怪叔叔

完整代码

import React, { useState, useEffect, useRef } from 'react';
import { useNavigate } from 'react-router-dom';

interface TypewriterProps {
  originalText: string;
  destination?: string;
}
const Typewriter: React.FC = ({ originalText, destination }) => {
    const [text, setText] = useState('');
    const navigate = useNavigate();
    const timerRef = useRef(null);

    ## 核心代码

    return (
        

); }; export default Typewriter;
赞赏 赞(2)
一晃又周三了
上一篇
镜头下的一点记录!
下一篇
在小程序中查看

这是个😊,挣点服务器费用😜

热门文章
Element render函数中使用map插入多条数据!
给感染新冠的老人提些建议
前端Vue中常用Rules校验规则
将博客搬至CSDN
四月的倒数几天了
简单三步,让你玩转微信自动邀请加群!!!
专题标签
agent (1) CSS (15) dom (1) Es6入门系列 (14) Git (3) html (1) iview (1) JavaScript (9) js (4) Lif (1) Node (4) pyecharts (1) Python (10) ref (1) scriptable (1) Skill (1) vsCode (1) vue (4) wordpress (2) 三月 (1) 上海 (1) 假期 (1) 其他分享 (3) 前端两三问 (15) 古镇 (1) 外滩 (1) 对象 (1) 小程序 (5) 年度总结 (6) 年终总结 (1) 微信机器人 (4) 打字机 (1) 技术 (1) 日常问题 (8) 日常问题记录 (1) 春天 (2) 服务器 (2) 海族馆 (1) 生活 (8) 网上国网 (1) 记录 (3) 通勤 (1) 重学JavaScript (11) 面试题 (10) 🌸 (1)
什么是Agent?
2026-08-15 23:49:12
431 0 2
什么是 Skill?
2026-08-12 21:32:42
348 1 0
失业在家,我给小朋友做了一个练字小程序!
2026-08-07 16:21:52
690 10 1
上线8年,15万用户的小程序,一共赚了多少钱?
2026-05-30 18:01:24
4,683 4 0
2
  • 2
博主

一位佛系的前端开发者,略通摄影,乐于尝试新事物,热衷于美食。

友链
故事胶片
公众号
坚果大叔 执行上下文 卖坚果的怪叔叔 Dacking
Copyright © 2017-2026 卖坚果的怪叔叔

开往-友链接力

萌ICP备20230818号

苏ICP备18048410号-3
  • 首页
  • 生活
  • 技术
  • 记录
  • 工具箱
  • 关于我
# CSS # # JavaScript # # vue # # 微信 # # 生活 #
坚果大叔
345
文章
171
评论
432
喜欢