我知道这有点迟,而且jquery.typer.js库可能是Marcos解释的最好的解决方案,但我现在有时间在我的手上,我尝试从您用jQuery引用的链接克隆行为和CSS。
这是我的working demo。
我创建递归函数的打字动画和文字遍历,亦随的亮点动画CSS转换:
JS
function typify($elem, wordSec, charSec, highlightSec) {
var texts = $elem.data('type').split(',');
$elem.css({
transition: 'background-size ' + (highlightSec/1000) + 's'
});
addByWord($elem, texts, 0, wordSec, charSec, highlightSec);
}
function addByWord($elem, texts, i, wordSec, charSec, highlightSec) {
if (i < texts.length) {
var text = texts[i],
duration = (text.length * charSec);
$elem.text('')
.addClass('reset')
.removeClass('highlight');
addByLetter($elem, texts[i], 0, charSec);
setTimeout(function() {
$elem.removeClass('reset')
.addClass('highlight');
}, duration + wordSec);
setTimeout(function() {
addByWord($elem, texts, ++i, wordSec, charSec, highlightSec);
}, duration + highlightSec + 300 + wordSec);
} else {
addByWord($elem, texts, 0, wordSec, charSec, highlightSec);
}
}
function addByLetter($elem, txt, i, sec) {
if (i < txt.length) {
var ch = txt.split('')[i];
$elem.text($elem.text() + ch);
setTimeout(function() {
addByLetter($elem, txt, ++i, sec);
}, sec);
}
}
typify($('.animation'), 1500, 105, 300);
CSS
.animation {
padding-bottom: 5px;
border-bottom: 5px solid #00a8e6;
box-sizing: content-box;
display: inline-block;
background: linear-gradient(to left, rgba(0, 20, 255, 0.5) 0%, rgba(0, 20, 255, 0.5) 100%) no-repeat top right;
background-size: 0% 100%;
}
.animation.highlight {
background-size: 100% 100%;
}
.animation.reset {
background: transparent;
background-size: 0% 100%;
}
函数参数的定义,typify($elem, wordSec, charSec, highlightSec)
下面:
- $ elem - 你想要的目标jQuery元素(应该有数据类型与 值由字符串分隔。
- wordSec - 在屏幕上以毫秒为单位被示出的每个字的持续时间, 正在键入之后和被突出显示之前
- charSec - 每个信毫秒打字动画的速度
- highlightSec - 以毫秒为单位
CSS高亮动画的速度