从零实现打字机效果:原生 JS + CSS 动画完整教程

134 阅读2分钟

用原生 JavaScript 实现一个打字机效果

在做网页交互或个人主页的时候,我们经常会看到一种很酷的 打字机效果:文字像人手敲出来一样,一个字一个字显示,还伴随着光标的闪烁。这个效果能为页面增添不少灵动感。

这篇文章,我会带大家用 原生 JavaScript(不依赖任何库)实现一个小而美的打字机效果。


效果展示

文字会像这样逐字打印出来,并且光标会随着文字移动:

Hello,欢迎来到我的文章。
这是一个用原生 JavaScript 实现的打字机效果。

光标闪烁在最后,就像真的在敲字一样。


核心代码

我们先写一个容器,用来放文字和光标:

<div id="typewriter"></div>

接着用 JavaScript 来实现逐字打印:

const text = `Hello,欢迎来到我的文章。
这是一个用原生 JavaScript 实现的打字机效果。
希望你也能在项目里试试看!`;

const container = document.getElementById("typewriter");

// 光标元素
const cursor = document.createElement("span");
cursor.className = "cursor";
cursor.textContent = "|";
container.appendChild(cursor);

let index = 0;

function type() {
  if (index < text.length) {
    // 在光标前插入一个新字符
    cursor.insertAdjacentText("beforebegin", text.charAt(index));
    index++;
    setTimeout(type, 100); // 每100ms打一个字
  }
}

type();

最后,加上光标闪烁的样式:

.cursor {
  display: inline-block;
  margin-left: 2px;
  animation: blink 0.7s infinite;
}

@keyframes blink {
  0%, 50% { opacity: 1; }
  50.01%, 100% { opacity: 0; }
}

这样,一个简洁的打字机效果就完成了 🎉


实现原理

实现的核心思路其实很简单:

  1. 创建光标元素:用一个 <span>|</span> 模拟光标,并加上闪烁动画。
  2. 逐字打印:使用 setTimeout 控制节奏,每次将一个字符插入到光标前。
  3. 光标跟随:光标始终保持在文字的最后,随着打印自然移动。

可以优化的点

  • 速度控制:可以在 setTimeout 里加入随机延迟,让打字速度更贴近人类手感。
  • 暂停效果:在遇到标点符号(如 ,。!)时适当延迟,提升自然感。
  • 多段文字:可以分段打印,模拟聊天或文章的排版。
  • 删除功能:加上退格效果,可以实现循环打字。

拓展玩法

  • 打造一个 个人简历网站,在首页用打字机效果展示自我介绍。
  • 博客文章 中插入逐字展示的标题或段落,提升阅读体验。
  • Canvas / SVG 动画 结合,做更炫酷的交互效果。

总结

一个简洁的打字机效果,其实只需要 原生 JavaScript + 一点点 CSS 就能搞定。核心就在于 控制文字插入节奏光标的闪烁移动

希望这篇文章对你有帮助!如果你在项目中用到了类似的效果,欢迎留言交流。