0

0

实现打字机效果的透明背景文字动画教程

霞舞

霞舞

发布时间:2026-03-04 19:58:08

|

692人浏览过

|

来源于php中文网

原创

实现打字机效果的透明背景文字动画教程

本文详解如何在保持背景完全透明的前提下,实现逐字输入+删除的循环打字机动画,适配视频背景等需要穿透显示的场景,核心在于移除伪元素遮罩、优化 css 渲染逻辑并采用 requestanimationframe 驱动平滑动画。

本文详解如何在保持背景完全透明的前提下,实现逐字输入+删除的循环打字机动画,适配视频背景等需要穿透显示的场景,核心在于移除伪元素遮罩、优化 css 渲染逻辑并采用 requestanimationframe 驱动平滑动画。

在构建现代网页标题动画(如首页主视觉文案轮播)时,常需将动态文字叠加在视频或渐变背景之上。此时若使用传统 background-color 或 ::before/::after 伪元素覆盖层(如原代码中 .sec-text:before 的深色背景块),会直接遮挡底层内容,破坏设计意图。解决的关键在于:彻底放弃任何不透明遮罩,仅通过纯文本内容变化 + 光标动画模拟“打字感”,同时确保所有元素背景默认透明(transparent)

以下为完整可运行方案:

✅ 正确做法:纯文本驱动 + 透明光标

JavaScript 部分改用 async/await 控制字符级节奏,并利用 requestAnimationFrame 提升动画流畅度(避免 setTimeout 时间抖动):

Keeva AI
Keeva AI

AI一键生成数字人营销视频

下载
const text = document.querySelector(".sec-text");
const phrases = ["Real Estate", "The Best Deal", "Support 24/7"];

// 基于 RAF 的毫秒级延迟工具(更精准)
const delay = () => new Promise(resolve => {
  setTimeout(() => requestAnimationFrame(resolve), 100);
});

const animatePhrase = async (str) => {
  // 逐字添加
  for (const char of str) {
    text.textContent += char;
    await delay();
  }

  // 暂停 1 秒后逐字删除
  await new Promise(r => setTimeout(r, 1000));
  let current = str;
  while (current.length > 0) {
    current = current.slice(0, -1);
    text.textContent = current;
    await delay();
  }
};

// 循环播放
(async () => {
  let idx = 0;
  while (true) {
    await animatePhrase(phrases[idx]);
    idx = (idx + 1) % phrases.length;
  }
})();

✅ CSS 关键改造:零背景 + 真实透明光标

原 .sec-text:before 的 background-color: #010718 是问题根源——它本质是“画一块黑板”再在其上打字。新方案改为 仅用 border-left 模拟光标,且确保 background-color 始终为 transparent(显式声明,避免继承污染):

.container .text.sec-text {
  position: relative;
  color: #c32000;
  font-size: 30px;
  font-weight: 600;
  /* 关键:显式设为透明,杜绝意外遮挡 */
  background-color: transparent;
}

/* 仅用 border-left 作光标,不占背景空间 */
.text.sec-text::after {
  content: "";
  position: absolute;
  top: 0;
  right: -5px; /* 光标位于文字末尾右侧 */
  height: 100%;
  width: 2px;
  background-color: currentColor; /* 自动继承文字颜色 */
  animation: blink 1s infinite;
}

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

? 注意:::after 使用 currentColor 而非固定色值,确保光标颜色随 .sec-text 的 color 动态同步;right: -5px 实现光标紧贴文字右侧,比 left: 100% 更稳定。

✅ HTML 结构精简(无冗余容器)

<div class="container">
  <span class="text first-text">Absolute</span>
  <span class="text sec-text"></span> <!-- 内容由 JS 动态填充 -->
</div>

⚠️ 重要注意事项

  • 勿用 opacity: 0 隐藏文字:这会导致光标不可见,应始终让 textContent 为空字符串 "" 初始状态;
  • 禁用 overflow: hidden 影响光标:.container 的 overflow: hidden 可能裁剪光标,若需保留请确保 .sec-text::after 的 right 偏移量足够;
  • 响应式适配:在移动设备上,建议将 font-size 改为 rem 或 vw 单位,并调整 delay() 时长(如降至 60ms)提升感知流畅度;
  • 性能提示:高频 DOM 操作(textContent 赋值)已足够轻量,无需进一步优化;但若需支持上百个词组,建议用 DocumentFragment 批量更新。

此方案彻底解耦文字渲染与背景控制,使

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

698

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

219

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1561

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

645

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

1128

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

1102

2024.04.29

go语言字符串相关教程
go语言字符串相关教程

本专题整合了go语言字符串相关教程,阅读专题下面的文章了解更多详细内容。

187

2025.07.29

c++字符串相关教程
c++字符串相关教程

本专题整合了c++字符串相关教程,阅读专题下面的文章了解更多详细内容。

91

2025.08.07

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

4

2026.03.04

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号