gpt4 book ai didi

javascript - 如何制作打字动画,可以在中途重新开始

转载 作者:行者123 更新时间:2023-12-04 15:08:53 36 4
gpt4 key购买 nike

所以我制作了一个简单的文本动画,并决定制作完成后,您可以重新启动它。问题是,我不确定在完成后强制它重新启动 onclick 的方法。我这样做的方式是,如果您单击屏幕,它可以并且会在中间重新启动,这很好,但它会继续打印之前的一些文本。不管怎样,这是我的代码

<html>
<head>
<title>Page Title</title>
</head>
<body>
<h1 id=typing-style></h1>
<script>
var i=0,text="Mitchell";
setInterval(()=>{
document.getElementById("typing-style").innerHTML += text.charAt(i);
i++;
},300)

function rerun() {
document.getElementById("typing-style").innerHTML = " ";
var i=0,text="Mitchell";
setInterval(()=>{
document.getElementById("typing-style").innerHTML += text.charAt(i);
i++;
},300)
}
</script>
<canvas id="screen" onclick="rerun()" width=1000% height=1000%></canvas>
</body>
</html>

所以我一直在尝试做的是让它能够在您单击屏幕时重新启动,但停止当前进程。希望有人能解决。

最佳答案

此代码从不调用 clearInterval ,因此两个计时器将同时运行,相互串扰对方的文本操作。代码会不必要地重复——在一个函数中编写一次代码,然后在每次需要运行逻辑时调用该函数会更容易。

对于这类事情,我会创建一个闭包来封装创建计时器所需的数据:intervalindex。您可以返回一个计时器启动函数,该函数处理重置计时器状态并可以在事件监听器中调用(首选 onclick,因为它会将行为保留在标记之外;read more)。

最后,首选 textContentinnerText 而不是 innerHTML。如果内容是纯文本的,它们会更快、更安全并且在语义上更合适。

const makeTextTyper = (el, text, speed) => {
let i;
let interval;
return () => {
clearInterval(interval);
el.innerText = "";
i = 0;
interval = setInterval(() => {
if (i < text.length) {
el.innerText += text[i++];
}
else {
clearInterval(interval);
}
}, speed)
};
};

const buttonEl = document.querySelector("button");
const typerEl = document.querySelector("h3");
const runTyper = makeTextTyper(typerEl, "Mitchell", 300);
buttonEl.addEventListener("click", runTyper);
runTyper();
<button>restart</button>
<h3></h3>

关于javascript - 如何制作打字动画,可以在中途重新开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65572193/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com