setTimeout 和重新加载 iframe 的问题

发布于 2024-12-06 00:01:04 字数 376 浏览 0 评论 0原文

我试图每 2 秒使用不同的页面更改 iframe 的 src,但到目前为止我失败了。谁能告诉我这段代码有什么问题吗?它仅加载最后一个文件 5.html,而不加载其他文件 1.html 2.html 3.html 和 4.html

function reloadiframe(nbr) {
    setTimeout(function () {
            document.getElementById("iframe").src = nbr + ".html";
    }, 2000);
}

function reload() {

    for (i=1;i<=5;i++) {
            reloadiframe(i);
    }
} 

I'm trying to change the src of an iframe every 2 seconds with different page but I failed miserably so far. Can anyone tell me what's wrong with this code? It only loads the last file, 5.html and not the other ones, 1.html 2.html 3.html and 4.html

function reloadiframe(nbr) {
    setTimeout(function () {
            document.getElementById("iframe").src = nbr + ".html";
    }, 2000);
}

function reload() {

    for (i=1;i<=5;i++) {
            reloadiframe(i);
    }
} 

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

天邊彩虹 2024-12-13 00:01:04

setTimeout 不等待。超时几乎都是在同一时间触发的,因为它们都是在几乎完全相同的时间开始的。只需一个小小的改变就可以解决这个问题:

function reloadiframe(nbr) {
    setTimeout(function () {
            document.getElementById("iframe").src = nbr + ".html";
    }, 2000*i); // <== right here
}

function reload() {

    for (i=1;i<=5;i++) {
            reloadiframe(i);
    }
} 

setTimeout does not wait. The timeouts all fire at pretty much exactly the same time, since they are all started at pretty much exactly the same time. Just a small change will fix the problem:

function reloadiframe(nbr) {
    setTimeout(function () {
            document.getElementById("iframe").src = nbr + ".html";
    }, 2000*i); // <== right here
}

function reload() {

    for (i=1;i<=5;i++) {
            reloadiframe(i);
    }
} 
依 靠 2024-12-13 00:01:04

您现在将重新加载延迟两秒钟。第 1、2、3 和 4 页实际上已加载,但很快被第 5 帧覆盖。

可以在 reloadiframe 中使用 setTimeout 来延迟下一次重新加载,也可以使用 setInterval 定期重新加载 iframe 或增加超时:

function reloadiframe(nbr) {
    document.getElementById("iframe").src = nbr + ".html";
    if (n <= 5) {
        setTimeout(function () {
            reloadiframe(nbr + 1);
        }, 2000);
    }
}
function reload() {
    setTimeout(function () {
        reloadiframe(i);
    }, 2000);
}

使用 setInterval 的替代方案:

var timer, nbr;
function reloadiframe() {
    document.getElementById("iframe").src = nbr + ".html";
    if (nbr > 5) {
        clearInterval(timer);
    }
}
function reload() {
    nbr = 1;
    timer = setInterval(reloadiframe, 2000);
}

You're now delaying the reload for two seconds. Page 1, 2, 3 and 4 actually get loaded, but are quickly overwritten by frame 5.

Either use setTimeout in reloadiframe to delay the next reload, use setInterval to periodically reload the iframe or increase the timeout:

function reloadiframe(nbr) {
    document.getElementById("iframe").src = nbr + ".html";
    if (n <= 5) {
        setTimeout(function () {
            reloadiframe(nbr + 1);
        }, 2000);
    }
}
function reload() {
    setTimeout(function () {
        reloadiframe(i);
    }, 2000);
}

Alternative using setInterval:

var timer, nbr;
function reloadiframe() {
    document.getElementById("iframe").src = nbr + ".html";
    if (nbr > 5) {
        clearInterval(timer);
    }
}
function reload() {
    nbr = 1;
    timer = setInterval(reloadiframe, 2000);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文