当前位置: 首页 > news >正文

练习小项目9:打字效果文字展示(多段文字循环+删除+光标闪烁)

项目简介:

本文介绍如何用原生JavaScript实现一个简洁的打字效果,支持:

  • 多段文字循环播放

  • 打字完后暂停一会儿

  • 逐字删除,形成打字机动画感

  • 打字光标闪烁效果

项目适合用于首页欢迎语、提示语等动态文本展示,能提升页面交互体验。

✨核心思路:

  1. 文本数组:维护一个文字数组 texts,依次轮播显示。

  2. 打字与删除状态:用状态变量控制当前是“打字”还是“删除”。

  3. 计时器定时执行:用 setInterval 实现每隔固定时间打出一个字或删去一个字。

  4. 暂停控制:文字全部打完后暂停一段时间,再开始删除。

  5. 循环播放:删除完毕切换到下一条文字,循环播放。

  6. 光标闪烁:用CSS动画实现。

💡 技术点练习:

  • 用状态变量区分“打字”和“删除”

  • setInterval 控制时间节奏

  • 使用 slice 截取字符串部分显示

  • 通过setTimeout实现暂停效果

  • 利用CSS动画 @keyframes blinksteps(1) 实现文字后光标闪烁

页面结构(HTML 参考): 

<p id="typeText" class="typing-text"></p>

  实践代码如下: 

CSS:

.typing-text::after {content: '|';/* 光标字符 */animation: blink 0.8s steps(1) infinite;margin-left: 2px;
}@keyframes blink {0%,50% {opacity: 1;}50.01%,100% {opacity: 0;}
}

 JS:

const texts = ['欢迎来到前端学习之旅。', '每天进步一点点!', '每天一个小项目!'];
const typeText = document.getElementById('typeText')let textIndex = 0      // 当前显示的文本索引
let charIndex = 0     // 当前文本中已显示的字符索引
let mode = 'typing'   // 状态:typing(打字) 或 deleting(删除)
let timer = null
const pauseTime = 1000    // 打字完成后暂停时间
const intervalTime = 200  // 打字间隔const startTyping = () => {const currentText = texts[textIndex]timer = setInterval(() => {if (mode === 'typing') {typeText.textContent = currentText.slice(0, charIndex + 1)charIndex++if (charIndex === currentText.length) {mode = 'pause'clearInterval(timer)setTimeout(() => {mode = 'deleting'startTyping()}, pauseTime)}} else if (mode === 'deleting') {typeText.textContent = currentText.slice(0, charIndex - 1)charIndex--if (charIndex === 0) {textIndex = (textIndex + 1) % texts.lengthmode = 'typing'clearInterval(timer)startTyping()}}}, intervalTime);
}startTyping()

页面效果展示 : 

 

相关文章:

  • 嵌入式学习笔记 - freeRTOS同优先级任务时间片抢占的实现
  • 酒店管理破局:AI 引领智能化转型
  • hf-mirror断点续传下载权重
  • (6)-Fiddler抓包-Fiddler状态面板详解
  • Java面试:从Spring Boot到分布式系统的技术探讨
  • SCL语言两台电机正反转控制程序从选型、安装到调试全过程的详细步骤指南(下)
  • 目标检测预测框置信度(Confidence Score)计算方式
  • 一文清晰理解目标检测指标计算
  • 深入分析SD-WAN成本效益和ROI(投资回报率):真的能降低WAN成本吗?
  • Spring Boot+Activiti7入坑指南初阶版
  • HbuilderX设置禁止import 引入模块换行
  • HOW - 简历和求职面试宝典(七)
  • spring的多语言怎么实现?
  • [解决]在 Vue 3 使用 Vite 开发的项目中,放在 public 文件夹里的文件,在打包部署后出现 404 的问题
  • Linux `|` 管道符与 `grep` 命令深度解析与高阶应用指南
  • 国产化redis 替代产品tendis 安装
  • siglip2(1) 设置模型返回所需变量
  • Redis--缓存击穿详解及解决方案
  • 动态规划法在解决实际问题中的应用
  • 论文笔记:DreamDiffusion
  • 学平面设计网站/seo工具不包括
  • 那个网站的是做vb题目的/微信软文范例100字
  • 宝山网站建设公司/百度竞价被点击软件盯上
  • 在360上做网站多少钱/广告推广方案怎么写
  • 做3d模型的叫什么牛的网站/太原seo排名公司
  • 济南营销型网站/关键词优化平台有哪些