React实现打字机效果~
执行上下文
共 3991字,需浏览 8分钟
·
2023-08-24 04:25
戳上方“执行上下文”,选择“置顶公众号”
关键时刻,第一时间送达!
核心代码
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]);
如何使用
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 是文字打印完后需要跳转的页面。如果打印后停留当前页面则无需该参数。
实际效果
完整代码
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;
图片分享
前端公众号和交流群
评论