
在网页设计中,动态效果能够显著提升用户体验和页面的吸引力。打字机效果(typewriter effect)便是其中一种常见的动画,它模拟了文本逐字输入的过程,常用于突出关键信息、制作引导语或增加页面的趣味性。本教程将指导您如何结合 html、css 和 javascript,从零开始构建一个可自定义的打字机文本动画。
首先,我们需要一个 HTML 元素来承载将要动态显示的文本。为了精确控制打字机效果的作用范围,我们强烈建议为该元素指定一个唯一的 id。在本例中,我们将使用一个 <h1> 标签,并为其设置 id="typewriter-text"。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>打字机效果</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<h1 id="typewriter-text"></h1>
<script src="script.js"></script>
</body>
</html>请注意,初始时 <h1> 标签内部可以为空,因为文本内容将完全由 JavaScript 动态生成。
打字机效果的一个重要组成部分是文本末尾闪烁的光标。我们可以通过 CSS 来实现这个效果。我们将利用一个 <span> 元素来模拟光标,并通过 CSS 动画使其周期性地改变边框颜色,从而产生闪烁感。
在 JavaScript 中,我们将动态地将这个 <span> 元素添加到当前文本的末尾。为了确保它不会被屏幕阅读器误读为实际文本内容,我们还会添加 aria-hidden="true" 属性。
立即学习“Java免费学习笔记(深入)”;
/* style.css */
#typewriter-text {
font-family: monospace; /* 保持等宽字体,使光标位置稳定 */
white-space: nowrap; /* 防止文本换行 */
overflow: hidden; /* 隐藏超出容器的文本,虽然在这里不直接作用于打字机效果 */
display: inline-block; /* 确保h1可以被span撑开 */
}
#typewriter-text span {
border-right: .05em solid; /* 光标样式:右边框 */
animation: caret 1s steps(1) infinite; /* 应用光标闪烁动画 */
}
@keyframes caret {
50% {
border-color: transparent; /* 动画50%时,边框变为透明 */
}
}JavaScript 是实现打字机效果的核心。它负责管理要显示的文本内容、逐字输出文本、控制动画速度以及处理文本序列的循环播放。
我们将把所有 JavaScript 代码放在 DOMContentLoaded 事件监听器中,以确保 DOM 完全加载后再执行脚本。
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
2
// script.js
document.addEventListener('DOMContentLoaded', function(event) {
// 定义要进行打字机效果的文本数组
const dataText = [
"VISIBILITÀ.",
"NUOVI INGAGGI.",
"NUOVI FAN.",
"PIÙ VISIBILITÀ!",
"SUCCESSO!"
];
const targetElement = document.getElementById('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) + '<span aria-hidden="true"></span>';
// 设置延迟,然后递归调用自身以显示下一个字符
setTimeout(function() {
typeWriter(text, i + 1, fnCallback);
}, 90); // 字符显示速度,单位毫秒
}
// 如果文本已显示完毕,并且存在回调函数
else if (typeof fnCallback === 'function') {
// 在短暂延迟后调用回调函数
setTimeout(fnCallback, 2000); // 文本显示完毕后等待2秒
}
}
/**
* 启动文本数组的打字机动画序列
* @param {number} i - dataText 数组的当前索引
*/
function StartTextAnimation(i) {
// 如果当前索引超出 dataText 数组范围,则循环回到第一个文本
if (i >= dataText.length) {
setTimeout(function() {
StartTextAnimation(0); // 循环回到数组开头
}, 20000); // 等待20秒后重新开始整个序列
return; // 结束当前函数执行
}
// 确保 dataText[i] 存在(即不是 undefined)
if (dataText[i]) {
// 开始对当前文本进行打字机动画
typeWriter(dataText[i], 0, function() {
// 当前文本动画完成后,启动下一个文本的动画
StartTextAnimation(i + 1);
});
}
}
// 启动文本动画序列
StartTextAnimation(0);
});将上述 HTML、CSS 和 JavaScript 代码分别保存为 index.html、style.css 和 script.js,并确保它们在同一目录下。
index.html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>动态打字机效果</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<h1 id="typewriter-text"></h1>
<script src="script.js"></script>
</body>
</html>style.css
body {
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
margin: 0;
background-color: #282c34;
color: #61dafb;
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
}
#typewriter-text {
font-size: 3em;
font-family: monospace;
white-space: nowrap;
overflow: hidden;
display: inline-block;
border-right: .15em solid orange; /* 初始光标,将被JS中的span替换 */
padding-right: 0.15em; /* 防止文本与光标过于接近 */
}
#typewriter-text span {
border-right: .05em solid; /* 实际闪烁光标样式 */
animation: caret 1s steps(1) infinite;
}
@keyframes caret {
50% {
border-color: transparent;
}
}script.js
document.addEventListener('DOMContentLoaded', function(event) {
const dataText = [
"VISIBILITÀ.",
"NUOVI INGAGGI.",
"NUOVI FAN.",
"PIÙ VISIBILITÀ!",
"SUCCESSO!"
];
const targetElement = document.getElementById('typewriter-text');
function typeWriter(text, i, fnCallback) {
if (i < text.length) {
targetElement.innerHTML = text.substring(0, i + 1) + '<span aria-hidden="true"></span>';
setTimeout(function() {
typeWriter(text, i + 1, fnCallback);
}, 90);
} else if (typeof fnCallback === 'function') {
setTimeout(fnCallback, 2000);
}
}
function StartTextAnimation(i) {
if (i >= dataText.length) {
setTimeout(function() {
StartTextAnimation(0);
}, 20000);
return;
}
if (dataText[i]) {
typeWriter(dataText[i], 0, function() {
StartTextAnimation(i + 1);
});
}
}
StartTextAnimation(0);
});通过结合 HTML 结构、CSS 动画和 JavaScript 逻辑,我们成功创建了一个动态且高度可定制的打字机文本效果。这种效果不仅能增强网页的视觉吸引力,还能有效地引导用户注意力,提升内容的表现力。理解并掌握这些基础技术,将为您的前端开发工作带来更多可能性。
以上就是使用 HTML、CSS 和 JavaScript 创建动态打字机效果的详细内容,更多请关注php中文网其它相关文章!
HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号