js实现打字
实现打字效果的方法
在JavaScript中实现打字效果可以通过多种方式完成,以下是几种常见的方法:
方法一:使用setInterval逐字显示
function typeWriter(text, element, speed) {
let i = 0;
const timer = setInterval(() => {
if (i < text.length) {
element.innerHTML += text.charAt(i);
i++;
} else {
clearInterval(timer);
}
}, speed);
}
// 使用示例
const targetElement = document.getElementById('typing');
typeWriter("Hello, this is a typing effect!", targetElement, 100);
方法二:使用递归setTimeout

function typeWriter(text, element, speed, i = 0) {
if (i < text.length) {
element.innerHTML += text.charAt(i);
setTimeout(() => typeWriter(text, element, speed, i + 1), speed);
}
}
// 使用示例
const targetElement = document.getElementById('typing');
typeWriter("This is a recursive typing effect!", targetElement, 100);
方法三:带删除效果的打字
function typeWithDelete(fullText, element, typingSpeed, deletingSpeed, pause) {
let i = 0;
let isDeleting = false;
function tick() {
const currentText = fullText.substring(0, i);
element.innerHTML = currentText;
if (!isDeleting && i === fullText.length) {
setTimeout(() => isDeleting = true, pause);
} else if (isDeleting && i === 0) {
isDeleting = false;
setTimeout(tick, typingSpeed);
return;
}
const speed = isDeleting ? deletingSpeed : typingSpeed;
i += isDeleting ? -1 : 1;
setTimeout(tick, speed);
}
tick();
}
// 使用示例
const targetElement = document.getElementById('typing');
typeWithDelete("This text types and deletes!", targetElement, 100, 50, 1000);
增强效果
添加光标闪烁效果

可以在HTML中添加一个光标元素,并通过CSS实现闪烁:
<span id="typing"></span><span class="cursor">|</span>
.cursor {
animation: blink 1s infinite;
}
@keyframes blink {
0%, 100% { opacity: 1; }
50% { opacity: 0; }
}
多文本循环打字
const texts = ["First text", "Second text", "Third text"];
let textIndex = 0;
function cycleTexts(element, typingSpeed, deletingSpeed, pause) {
typeWithDelete(texts[textIndex], element, typingSpeed, deletingSpeed, pause);
textIndex = (textIndex + 1) % texts.length;
setTimeout(() => cycleTexts(element, typingSpeed, deletingSpeed, pause), pause * 2);
}
// 使用示例
const targetElement = document.getElementById('typing');
cycleTexts(targetElement, 100, 50, 1000);
注意事项
- 确保目标元素存在且为空,否则会追加到现有内容
- 调整速度参数以获得理想的打字节奏
- 对于更复杂的效果,可以考虑使用现成的库如Type.js
- 在组件卸载时清除定时器,防止内存泄漏
这些方法提供了从简单到高级的打字效果实现,可以根据具体需求选择或组合使用。






