我尝试在每次更改之间以1秒的间隔连续更改元素的文本。
问题在于它正在跳过中间变化,只是显示从元素的初始文本到最终文本的变化(' text' to' text4' as反对:'文字'文字2'到' text3'到' text4')。
为什么会发生这种情况以及如何避免?
setTimeout(
function()
{
$("#elementid").text("text2");
}, 1000);
setTimeout(
function()
{
$("#elementid").text("text3");
}, 1000);
setTimeout(
function()
{
$("#elementid").text("text4");
}, 1000);
答案 0 :(得分:1)
那是因为你一次设置所有超时,在你设置它们的第二个之后完成。您将延迟更改为1000,2000,3000:
setTimeout(
function() {
$("#elementid").text("text2");
}, 1000);
setTimeout(
function() {
$("#elementid").text("text3");
}, 2000);
setTimeout(
function() {
$("#elementid").text("text4");
}, 3000);
或嵌套它们:
setTimeout(
function() {
$("#elementid").text("text2");
setTimeout(
function() {
$("#elementid").text("text3");
setTimeout(
function() {
$("#elementid").text("text4");
}, 1000);
}, 1000);
}, 1000);
答案 1 :(得分:1)
如果您可以使用Promises,那么我会建议您使用此代码段
const showTextWithDelay = (text, delay) => {
return new Promise(resolve => {
setTimeout(() => {
$("#elementid").text(text);
resolve();
}, delay);
})
};
showTextWithDelay("text1", 1000)
.then(() => showTextWithDelay("text2", 1000))
.then(() => showTextWithDelay("text3", 1000));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="elementid">---</div>