
打字机效果是一种常见的网页动态文本展示方式,它模拟了文字逐个字符出现的动画,并通常伴随着一个闪烁的光标,能够有效吸引用户注意力。本教程将指导您如何通过html定义文本容器、css实现光标动画以及javascript控制文本输入逻辑,来构建一个功能完善且可循环的打字机效果。
首先,我们需要一个HTML元素作为文本的容器。为了精确控制打字机效果的目标,建议为该元素分配一个唯一的ID。
<!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>标签,并为其指定了id="typewriter-text"。所有动态生成的文本都将显示在这个元素中。
打字机效果的关键之一是闪烁的光标。我们可以通过CSS的border-right属性和@keyframes动画来实现这一效果。当JavaScript逐字显示文本时,会在当前文本后添加一个<span>标签,这个<span>标签将作为我们的光标。
/* 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; /* 动画到一半时,光标透明 */
}
}JavaScript是实现打字机效果的核心。它负责逐个字符地显示文本、控制显示速度以及在多段文本之间进行切换和循环。
立即学习“Java免费学习笔记(深入)”;
// 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) {
// 将当前字符添加到目标元素,并附加一个用于光标的<span>
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秒,可调整
}
}
/**
* 启动文本动画,循环播放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代码详解:
为了方便您测试,这里提供一个完整的HTML文件,包含了上述所有HTML、CSS和JavaScript代码。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>打字机效果演示</title>
<style>
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; /* 动画到一半时,光标透明 */
}
}
</style>
</head>
<body>
<h1 id="typewriter-text"></h1>
<script>
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) {
// 将当前字符添加到目标元素,并附加一个用于光标的<span>
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秒,可调整
}
}
/**
* 启动文本动画,循环播放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);
});
</script>
</body>
</html>通过本教程,您应该已经掌握了如何结合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号