图像上超棒的打字效果叠加(CSS+JS)
章节:
这是一个关于如何在图片上创建文字效果叠加层的教程。它只用 CSS 和 JS 实现,没有使用任何额外的库。效果如下:
这里,打字效果被添加到了英雄图片上。英雄图片是放置在网页显著位置的大型图片(来源:维基百科)。它的作用是立即吸引访客的注意力。
章节:
步骤 1 - 查找图像
- 首先,我们先找到一张最符合我们需求的英雄图片。我获取免费图片的网站是https://www.pexels.com/。找到图片后,创建一个新的 HTML 文件,并在 body 标签内添加以下脚本。将 hero_image.jpg 替换为你自己的图片的路径和名称。
<div class="container">
<img src="hero_image.jpg" alt="Hero Image">
<div class='console-container'>
<span id='text'></span>
<div class='console-underscore' id='cursor'>|</div>
</div>
</div>
现在你的页面应该如下所示:
第 2 步 - 使用 CSS 进行美化
- 现在我们将添加一些 CSS,使我们的图片看起来像英雄图片,从而吸引更多注意力。在 CSS 文件或 HTML 中的样式选项卡中添加以下代码。
@import url('https://fonts.googleapis.com/css2?family=Open+Sans:wght@700&display=swap');
.console-container {
font-family: 'Open Sans', sans-serif;
font-size: 4vw;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
.console-underscore {
display: inline-block;
position: relative;
color: white;
}
.container {
position: relative;
text-align: center;
}
img {
width:100%;
}
现在你的页面应该如下所示:
别介意竖线。下一步我们会给它添加动画效果,并将其用作光标。
步骤 3 - 使用 JS 创建打字效果
- 最后一步是添加我们想要动画的文本,并使用 JavaScript 来实现动画效果。为此,添加以下代码块,它是一个我们可以调用的函数:
重要提示:请将此脚本放置在包含图片的 div 标签下方。否则打字效果将无法实现。
function typing_effect(words, colors) {
var cursor = document.getElementById('cursor'); //cursor
var text = document.getElementById('text') //text
var blink = true;
var wait = false;
var letters_count = 1;
var temp = 1;
text.style.color = colors[0]
window.setInterval(function () { //wait between words when it starts writting
if (letters_count === 0 && wait === false) {
wait = true;
text.innerHTML = '' // leave a blank
window.setTimeout(function () {
var usedColor = colors.splice(0, 1)[0] //remove first element and get it as str
colors.push(usedColor);
var usedWord = words.splice(0, 1)[0]
words.push(usedWord);
temp = 1;
text.style.color = colors[0]
letters_count += temp;
wait = false;
}, 1000)
} else if (letters_count === words[0].length + 1 && wait === false) {
wait = true;
window.setTimeout(function () { //wait a bit until words finished and start deleting
temp = -1;
letters_count += temp;
wait = false;
}, 1000)
} else if (wait === false) { //write words
text.innerHTML = words[0].substr(0, letters_count)
letters_count += temp;
}
}, 120)
window.setInterval(function () {
if (blink) {
cursor.style.opacity = "0";
blink = false;
} else {
cursor.style.opacity = "1";
blink = true;
}
}, 400)
}
- 函数调用如下:
typing_effect(words , colors)
。这些参数是列表。第一个参数是一个字符串列表,包含所有将显示的短语。第二个参数是一个字符串列表,包含每个短语将具有的颜色。注意:这两个列表的长度不必相同。在我的示例中,调用方式如下:
typing_effect(['Hello World', 'My name is Harry', 'I am a programmer', 'This is a JS+CSS example'],
['#FFFFFF', 'orange', 'blue', 'yellow']);
JS代码解释
如果您想跳过代码的解释,只需单击此处转到下一部分。
参数
该代码是一个接受两个输入参数的函数。它们已在上一节中解释过。
函数调用如下:
typing_effect(words , colors)
。这些参数是列表。第一个参数是一个字符串列表,包含所有要显示的短语。第二个参数是一个字符串列表,包含每个短语将具有的颜色。注意:这两个列表的长度不必相同。
变量
var cursor= document.getElementById('cursor');
- 获取光标var text= document.getElementById('text');
- 获取将添加文本的区域var blink= true;
- 显示/隐藏光标的标志var wait= false;
- 等待短语之间的标志var letters_count= 1;
- 计数字母的 int var temp= 1;
- 用于递增/递减的 intletters_count
功能
setTimeout
该函数由两个函数组成setInterval
。第一个函数setInterval
用于输入短语,删除它们,然后输入下一个短语。
这段代码在短语之间等待一段时间,然后开始输入下一个短语。
if (letters_count === 0 && wait === false) {
wait = true;
text.innerHTML = '' // leave a blank
window.setTimeout(function () {
var usedColor = colors.splice(0, 1)[0]
colors.push(usedColor);
var usedWord = words.splice(0, 1)[0]
words.push(usedWord);
temp = 1;
text.style.color = colors[0]
letters_count += temp;
wait = false;
}, 1000)
}
这段代码在短语输入后等待 1 秒,然后开始删除它。
else if (letters_count === words[0].length + 1 && wait === false) {
wait = true;
window.setTimeout(function () {
temp = -1;
letters_count += temp;
wait = false;
}, 1000)
}
这段代码只是输入单词
else if (wait === false) {
text.innerHTML = words[0].substr(0, letters_count)
letters_count += temp;
}
最后,这段代码使光标闪烁,以模拟打字时的光标。
window.setInterval(function () {
if (blink) {
cursor.style.opacity = "0";
blink = false;
} else {
cursor.style.opacity = "1";
blink = true;
}
}, 400)
完整代码
- codepen 中的完整代码如下:
就是这样!
希望你觉得这很简单而且有用。
希望你喜欢它😄。
探索愉快!!
文章来源:https://dev.to/charalambosianonnou/awesome-typing-effect-overlay-on-images-css-js-2nof