0

0

使用HTML、CSS和JavaScript实现动态打字机文本效果

DDD

DDD

发布时间:2025-10-02 08:01:02

|

177人浏览过

|

来源于php中文网

原创

使用HTML、CSS和JavaScript实现动态打字机文本效果

本文详细介绍了如何利用HTML结构、CSS动画和JavaScript逻辑协同工作,创建出引人注目的打字机文本效果。教程涵盖了文本逐字显示、光标闪烁动画以及多段文本循环播放的核心实现原理与完整代码示例,旨在帮助开发者轻松为网页添加动态交互性文本。

1. 概述

打字机效果是一种常见的网页动态文本展示方式,它模拟了文字逐个字符出现的动画,并通常伴随着一个闪烁的光标,能够有效吸引用户注意力。本教程将指导您如何通过html定义文本容器、css实现光标动画以及javascript控制文本输入逻辑,来构建一个功能完善且可循环的打字机效果。

2. HTML结构

首先,我们需要一个HTML元素作为文本的容器。为了精确控制打字机效果的目标,建议为该元素分配一个唯一的ID。




    
    
    打字机效果演示
    


    

在这个示例中,我们创建了一个空的

标签,并为其指定了id="typewriter-text"。所有动态生成的文本都将显示在这个元素中。

3. CSS样式:实现闪烁光标

打字机效果的关键之一是闪烁的光标。我们可以通过CSS的border-right属性和@keyframes动画来实现这一效果。当JavaScript逐字显示文本时,会在当前文本后添加一个标签,这个标签将作为我们的光标。

/* style.css */
body {
    font-family: 'Arial', sans-serif;
    display: flex;
    justify-content: center;
    align-items: center;
    min-height: 100vh;
    margin: 0;
    background-color: #f0f0f0;
    color: #333;
}

#typewriter-text {
    font-size: 3em;
    white-space: nowrap; /* 防止文本换行 */
    overflow: hidden; /* 隐藏超出容器的文本,配合打字机效果 */
    margin: 0;
    padding: 0;
}

/* 光标样式 */
#typewriter-text span {
    border-right: .08em solid; /* 光标的宽度和颜色 */
    animation: caret 1s steps(1) infinite; /* 光标闪烁动画 */
    display: inline-block; /* 确保span能正确显示border */
    vertical-align: middle; /* 垂直对齐光标 */
    margin-left: 2px; /* 光标与文本的间距 */
}

/* 光标闪烁动画 */
@keyframes caret {
    50% {
        border-color: transparent; /* 动画到一半时,光标透明 */
    }
}
  • border-right: .08em solid;:创建了一个右边框作为光标。.08em定义了光标的宽度。
  • animation: caret 1s steps(1) infinite;:应用了一个名为caret的动画。
    • 1s:动画持续时间为1秒。
    • steps(1):动画在两个离散的步骤之间切换,即从显示到隐藏,再从隐藏到显示,模拟闪烁效果。
    • infinite:动画无限循环。
  • @keyframes caret:定义了caret动画,在50%的时间点将border-color设置为transparent,从而实现闪烁。

4. JavaScript逻辑:实现文本输入与循环

JavaScript是实现打字机效果的核心。它负责逐个字符地显示文本、控制显示速度以及在多段文本之间进行切换和循环。

立即学习Java免费学习笔记(深入)”;

Asp开源商城系统YothSHOP
Asp开源商城系统YothSHOP

YothSHOP是优斯科技鼎力打造的一款asp开源商城系统,支持access和Sql server切换,完善的会员订单管理,全站生成静态html文件,SEO优化效果极佳,后台XP模式和普通模式随意切换,极易操作,欢迎使用! Asp开源商城系统YothSHOP功能介绍:1.使用静态页和程序页分离技术,网站可自由开启和关闭,实现全站生成静态页,可动静态切换,方便二次开发和后期维护。2.管理员管理:后台

下载
// script.js
document.addEventListener('DOMContentLoaded', function(event) {
  // 定义要进行打字机效果的文本数组
  var dataText = [
    "VISIBILITÀ.",
    "NUOVI INGAGGI.",
    "NUOVI FAN.",
    "PIÙ VISIBILITÀ!",
    "SUCCESSO!"
  ];

  // 获取目标H1元素
  var targetElement = document.querySelector("#typewriter-text");

  /**
   * 逐字显示单个文本字符串
   * @param {string} text - 要显示的文本
   * @param {number} i - 当前字符索引
   * @param {function} fnCallback - 文本显示完成后的回调函数
   */
  function typeWriter(text, i, fnCallback) {
    // 检查文本是否已全部显示
    if (i < text.length) {
      // 将当前字符添加到目标元素,并附加一个用于光标的
      targetElement.innerHTML = text.substring(0, i + 1) + '';

      // 设置延时,然后递归调用自身以显示下一个字符
      setTimeout(function() {
        typeWriter(text, i + 1, fnCallback);
      }, 90); // 每个字符的显示间隔,可调整
    }
    // 如果文本已全部显示,且存在回调函数,则在延时后调用回调
    else if (typeof fnCallback === 'function') {
      setTimeout(fnCallback, 2000); // 文本显示完毕后等待2秒,可调整
    }
  }

  /**
   * 启动文本动画,循环播放dataText数组中的文本
   * @param {number} i - dataText数组的当前索引
   */
  function StartTextAnimation(i) {
    // 检查当前索引的文本是否存在
    if (i < dataText.length) {
      // 文本存在,开始打字机动画
      typeWriter(dataText[i], 0, function() {
        // 当前文本动画完成后,启动下一个文本的动画
        StartTextAnimation(i + 1);
      });
    }
    // 如果所有文本都已播放完毕,则在延时后从头开始循环
    else {
      setTimeout(function() {
        StartTextAnimation(0); // 循环回到第一个文本
      }, 20000); // 所有文本播放完后等待20秒再重新开始,可调整
    }
  }

  // 页面加载完成后,启动文本动画
  StartTextAnimation(0);
});

JavaScript代码详解:

  1. DOMContentLoaded事件监听器:确保在DOM完全加载后再执行JavaScript代码,避免因元素未加载而导致的错误。
  2. dataText数组:存储所有需要进行打字机效果的文本字符串。您可以根据需要修改或扩展此数组。
  3. targetElement:通过document.querySelector("#typewriter-text")精确地选择了HTML中带有id="typewriter-text"的元素,而不是选择所有

    标签,这解决了原始问题中提到的“只针对特定h1”的需求。

  4. typeWriter(text, i, fnCallback)函数
    • 这是一个递归函数,负责逐个字符地显示text字符串。
    • text.substring(0, i + 1):截取从字符串开头到当前索引i的子字符串,模拟字符逐个出现。
    • +'':在当前文本末尾添加一个标签,这个标签会通过CSS样式显示为闪烁的光标。aria-hidden="true"是为了提高可访问性,告诉屏幕阅读器忽略这个纯粹用于视觉效果的元素。
    • setTimeout(..., 90):设置一个延时,然后再次调用typeWriter函数来显示下一个字符。90毫秒是每个字符之间的间隔,您可以根据需要调整来改变打字速度。
    • 当所有字符都显示完毕(i >= text.length)时,如果提供了fnCallback函数,则在2000毫秒后调用它。这个回调机制用于通知外部函数当前文本已完成显示。
  5. StartTextAnimation(i)函数
    • 负责遍历dataText数组,依次播放每个文本的打字机动画。
    • if (i
    • typeWriter(dataText[i], 0, function(){ StartTextAnimation(i + 1); });:调用typeWriter函数显示当前索引的文本。当typeWriter完成后,其回调函数会触发,进而调用StartTextAnimation(i + 1)来播放数组中的下一个文本。
    • else块:当所有文本都已播放完毕时,进入此分支。setTimeout(function() { StartTextAnimation(0); }, 20000);会在20000毫秒(20秒)后重新启动动画,从dataText数组的第一个文本开始循环播放。这个延时也可以根据需求调整。
  6. StartTextAnimation(0):在DOMContentLoaded事件监听器内部,首次调用StartTextAnimation(0)来启动整个打字机动画序列。

5. 完整示例代码

为了方便您测试,这里提供一个完整的HTML文件,包含了上述所有HTML、CSS和JavaScript代码。




    
    
    打字机效果演示
    


    

6. 注意事项与优化

  • 目标元素选择器:务必使用精确的选择器(如#typewriter-text)来定位您的文本容器,而不是泛泛地选择标签名(如h1),以避免影响页面上其他同类型元素。
  • 动画速度调整
    • typeWriter函数中的setTimeout延时(90毫秒)控制着字符输入的快慢。
    • typeWriter函数结束后的setTimeout延时(2000毫秒)控制着每段文本显示完毕后到下一段开始前的等待时间。
    • StartTextAnimation函数循环结束后setTimeout延时(20000毫秒)控制着所有文本循环一遍后到重新开始前的等待时间。
    • 根据您的设计需求,灵活调整这些数值。
  • 文本内容管理:dataText数组是您管理打字机文本内容的中心。您可以轻松地添加、修改或删除其中的文本。
  • 可访问性:在光标标签上添加aria-hidden="true"属性是一个良好的实践,它告诉屏幕阅读器忽略此元素,因为它纯粹是视觉效果,对理解内容没有帮助。
  • CSS white-space 和 overflow:white-space: nowrap;确保文本在打字过程中不会自动换行,overflow: hidden;则在文本超出容器时隐藏,这对于打字机效果的视觉呈现至关重要。
  • 性能考虑:对于大量文本或非常频繁的动画,可以考虑使用requestAnimationFrame代替setTimeout来获得更平滑的动画效果,尽管对于打字机效果这种相对简单的动画,setTimeout通常足够。

7. 总结

通过本教程,您应该已经掌握了如何结合HTML、CSS和JavaScript来创建一个动态且具有吸引力的打字机文本效果。这种效果不仅能提升用户体验,还能在网页中突出显示重要信息。您可以根据自己的创意和需求,进一步扩展和定制这些代码,例如添加音效、更复杂的动画或与其他交互事件结合。

热门AI工具

更多
DeepSeek
DeepSeek

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

豆包大模型
豆包大模型

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

通义千问
通义千问

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

腾讯元宝
腾讯元宝

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

文心一言
文心一言

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

讯飞写作
讯飞写作

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

即梦AI
即梦AI

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

ChatGPT
ChatGPT

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

相关专题

更多
js获取数组长度的方法
js获取数组长度的方法

在js中,可以利用array对象的length属性来获取数组长度,该属性可设置或返回数组中元素的数目,只需要使用“array.length”语句即可返回表示数组对象的元素个数的数值,也就是长度值。php中文网还提供JavaScript数组的相关下载、相关课程等内容,供大家免费下载使用。

559

2023.06.20

js刷新当前页面
js刷新当前页面

js刷新当前页面的方法:1、reload方法,该方法强迫浏览器刷新当前页面,语法为“location.reload([bForceGet]) ”;2、replace方法,该方法通过指定URL替换当前缓存在历史里(客户端)的项目,因此当使用replace方法之后,不能通过“前进”和“后退”来访问已经被替换的URL,语法为“location.replace(URL) ”。php中文网为大家带来了js刷新当前页面的相关知识、以及相关文章等内容

437

2023.07.04

js四舍五入
js四舍五入

js四舍五入的方法:1、tofixed方法,可把 Number 四舍五入为指定小数位数的数字;2、round() 方法,可把一个数字舍入为最接近的整数。php中文网为大家带来了js四舍五入的相关知识、以及相关文章等内容

776

2023.07.04

js删除节点的方法
js删除节点的方法

js删除节点的方法有:1、removeChild()方法,用于从父节点中移除指定的子节点,它需要两个参数,第一个参数是要删除的子节点,第二个参数是父节点;2、parentNode.removeChild()方法,可以直接通过父节点调用来删除子节点;3、remove()方法,可以直接删除节点,而无需指定父节点;4、innerHTML属性,用于删除节点的内容。

479

2023.09.01

JavaScript转义字符
JavaScript转义字符

JavaScript中的转义字符是反斜杠和引号,可以在字符串中表示特殊字符或改变字符的含义。本专题为大家提供转义字符相关的文章、下载、课程内容,供大家免费下载体验。

554

2023.09.04

js生成随机数的方法
js生成随机数的方法

js生成随机数的方法有:1、使用random函数生成0-1之间的随机数;2、使用random函数和特定范围来生成随机整数;3、使用random函数和round函数生成0-99之间的随机整数;4、使用random函数和其他函数生成更复杂的随机数;5、使用random函数和其他函数生成范围内的随机小数;6、使用random函数和其他函数生成范围内的随机整数或小数。

1091

2023.09.04

如何启用JavaScript
如何启用JavaScript

JavaScript启用方法有内联脚本、内部脚本、外部脚本和异步加载。详细介绍:1、内联脚本是将JavaScript代码直接嵌入到HTML标签中;2、内部脚本是将JavaScript代码放置在HTML文件的`<script>`标签中;3、外部脚本是将JavaScript代码放置在一个独立的文件;4、外部脚本是将JavaScript代码放置在一个独立的文件。

659

2023.09.12

Js中Symbol类详解
Js中Symbol类详解

javascript中的Symbol数据类型是一种基本数据类型,用于表示独一无二的值。Symbol的特点:1、独一无二,每个Symbol值都是唯一的,不会与其他任何值相等;2、不可变性,Symbol值一旦创建,就不能修改或者重新赋值;3、隐藏性,Symbol值不会被隐式转换为其他类型;4、无法枚举,Symbol值作为对象的属性名时,默认是不可枚举的。

554

2023.09.20

edge浏览器怎样设置主页 edge浏览器自定义设置教程
edge浏览器怎样设置主页 edge浏览器自定义设置教程

在Edge浏览器中设置主页,请依次点击右上角“...”图标 > 设置 > 开始、主页和新建标签页。在“Microsoft Edge 启动时”选择“打开以下页面”,点击“添加新页面”并输入网址。若要使用主页按钮,需在“外观”设置中开启“显示主页按钮”并设定网址。

0

2026.01.26

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 0.8万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3万人学习

CSS教程
CSS教程

共754课时 | 23.8万人学习

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

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