前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >React实现打字机效果~

React实现打字机效果~

作者头像
执行上下文
发布2023-09-06 14:09:48
1K1
发布2023-09-06 14:09:48
举报
文章被收录于专栏:执行上下文

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

核心代码

代码语言:javascript
复制
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秒后执行跳转操作。

如何使用

代码语言:javascript
复制
import React from 'react';
import Typewriter from './Typewriter';

const App: React.FC = () => {
  return (
    <div>
      <Typewriter originalText="Hello, World!" destination="/other-page" />
    </div>
  );
};

export default App;

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

实际效果

完整代码

代码语言:javascript
复制
import React, { useState, useEffect, useRef } from 'react';
import { useNavigate } from 'react-router-dom';

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

    ## 核心代码
    
    return (
        <div className="typewriter">
          <h1>{text}</h1>
        </div>
    );
};

export default Typewriter;
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-08-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 执行上下文 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 核心代码
  • 如何使用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档