打字机文字效果(纯 CSS + JS 双实现,可调速度)

CSSJS 许可:自研原创

打字机文字效果两种实现:纯 CSS(宽度遮罩)+ JS(逐字输入),光标闪烁速度可调,个人主页/作品集刚需,复制即用。

效果演示(真实可交互)

你好,我是粤喵 🎨 欢迎来到前端特效组件库

完整代码

方式一:纯 CSS(适合固定文案)

<p class="typewriter">你好,我是粤喵 🎨</p>
.typewriter {
  display: inline-block;
  overflow: hidden;
  white-space: nowrap;
  border-right: 2px solid #6c8cff;   /* 光标 */
  width: 0;
  animation:
    typing 4s steps(24, end) forwards,  /* 打字时长=字符数×0.15s左右 */
    caret .7s step-end infinite;         /* 光标闪烁 */
}
@keyframes typing { to { width: 24em; } }
@keyframes caret { 50% { border-color: transparent; } }

要点:steps(n) 里的 n 取文案字符数(中文按字算);width 目标值用 em 保证随字号缩放。

方式二:JS(支持循环打字+删除,适合多变文案)

<p id="typewriter" data-text="JavaScript 版打字机,逐字敲出!"></p>
const el = document.getElementById('typewriter');
const full = el.dataset.text;
let i = 0, deleting = false;
function tick() {
  el.textContent = full.slice(0, i);
  if (!deleting) {
    if (i < full.length) { i++; setTimeout(tick, 90); }        // 打字速度
    else { deleting = true; setTimeout(tick, 1600); }           // 停留时间
  } else {
    if (i > 0) { i--; setTimeout(tick, 40); }                   // 删除速度
    else { deleting = false; setTimeout(tick, 400); }           // 重新开始前停顿
  }
}
tick();

参数调节说明

参数位置说明
打字速度setTimeout(tick, 90)越小越快,中文建议 80-120ms/字
停留时间1600打完后停顿多久再删除
删除速度40越小删得越快
光标颜色border-right: 2px solid改成主题色
光标闪烁.7s闪烁周期

兼容性与性能

常见问题

Q: 为什么我的纯 CSS 版光标不闪? 检查 @keyframes caret 是否完整复制,且 border-right 初始有颜色。

Q: 支持中文吗? 支持。JS 版直接按字符切分;纯 CSS 版 steps(n) 的 n 按中文字数填。

Q: 可以商用吗? 可以,本组件为粤喵自研原创,免费商用无需署名。

常见问题

这个组件可以商用吗?

可以。本组件为粤喵自研原创,可免费用于个人和商业项目,无需署名。

浏览器兼容性如何?

支持所有现代浏览器(Chrome / Firefox / Safari / Edge 最新版本)。旧版 IE 不支持 CSS 动画相关特性。

怎么修改动画参数?

直接调整 CSS 中的 animation-duration(时长)、animation-timing-function(缓动曲线)等属性即可,代码中有注释说明。