【发布时间】:2018-03-18 13:12:05
【问题描述】:
我试图用我的文本实现打字机效果,其中每个句子(h1 标签)被打印,然后文本被清除,第二个句子被打印。一旦第二个或第三个句子打印完成,它应该清除并开始循环打印第一个句子。
我无法清除第一句话,所有文字都被堆叠起来,而且“the”这个词也没有出现。
任何想法如何进行?我想将文本保留在 HTML 中,以便在不同的页面上重复使用该脚本。
JSFiddle 链接:https://jsfiddle.net/b33uhLL2/
HTML:
<div id="typewriter">
<h1>This<br> is<br> the<br>first<br><span class="highlight">sentence</span></h1>
<h1>This<br> is<br> the<br>second<br>sentence</h1>
</div>
JS:
function setupTypewriter(t) {
var HTML = t.innerHTML;
t.innerHTML = "";
var cursorPosition = 0,
tag = "",
writingTag = false,
tagOpen = false,
typeSpeed = 200,
tempTypeSpeed = 0;
var type = function() {
if (writingTag === true) {
tag += HTML[cursorPosition];
}
if (HTML[cursorPosition] === "<") {
tempTypeSpeed = 0;
if (tagOpen) {
tagOpen = false;
writingTag = true;
} else {
tag = "";
tagOpen = true;
writingTag = true;
tag += HTML[cursorPosition];
}
}
if (!writingTag && tagOpen) {
tag.innerHTML += HTML[cursorPosition];
}
if (!writingTag && !tagOpen) {
if (HTML[cursorPosition] === " ") {
tempTypeSpeed = 0;
} else {
tempTypeSpeed = (Math.random() * typeSpeed) + 50;
}
t.innerHTML += HTML[cursorPosition];
}
if (writingTag === true && HTML[cursorPosition] === ">") {
tempTypeSpeed = (Math.random() * typeSpeed) + 50;
writingTag = false;
if (tagOpen) {
var newSpan = document.createElement("span");
t.appendChild(newSpan);
newSpan.innerHTML = tag;
tag = newSpan.firstChild;
}
}
cursorPosition += 1;
if (cursorPosition < HTML.length - 1) {
setTimeout(type, tempTypeSpeed);
}
};
return {
type: type
};
}
var typer = document.getElementById('typewriter');
typewriter = setupTypewriter(typewriter);
typewriter.type();
CSS:
h1 {
font-family: helvetica;
font-size: 20px;
}
【问题讨论】:
-
您是想自己动手,还是只是在寻找解决方案?因为那里已经有很多库已经这样做了
-
我想将文本保留在 HTML 中,大多数库将文本放在 JS 中
标签: javascript jquery css