javascript - 加载图像后重定向

标签 javascript redirect wait

所以我最近一直在开发一个网站,问题是每个页面的背景都是图像,因此,在较慢的连接上(这是一些目标受众的情况)图像会按原样逐渐加载下载,为了解决这个问题,我正在尝试制作一个执行以下操作的预加载页面:

  • 加载图片
  • 加载完成后,将用户重定向到请求的页面

    <script type="text/javascript">
    <!--//--><![CDATA[//><!--
        var images = new Array()
        var count=0;
        function preload() {
            for (i = 0; i < preload.arguments.length; i++) {
                images[i] = new Image()
                images[i].src = preload.arguments[i]
            }
        if(count==4) {
        window.location = "index.html";
        }
        }
        preload(
            "backgrounds/bg1.jpg",
            "backgrounds/bg2.jpg",
            "backgrounds/bg3.jpg",
            "backgrounds/bg4.jpg"
        )
    //--><!]]>
    

问题是它直接重定向(我假设它只是开始下载图像然后直接将 1 加到计数器变量,很快达到 4 并且没有给图像下载时间。

有什么想法可以让它在图片下载完成时发出信号,或者只在图片下载完成后才执行重定向?

最佳答案

您需要等待load 事件。这很简单:

function preload(images, timeout, cb) {
  var cbFired = false,
      remaining = images.length,
      timer = null;

  function imageDone() {
    remaining--;

    if(remaining === 0 && !cbFired) {
      cbFired = true;
      clearTimeout(timer);
      cb();
    }
  }

  function timerExpired() {
    if(cbFired)
      return;

    cbFired = true;
    cb();
  }

  for(var i = 0; i < images.length; i++) {
    var img = new Image();
    img.onload = imageDone;
    img.onerror = imageDone;
    img.src = images[i];
  }

  timer = setTimeout(timerExpired, timeout);
}

您需要检查一些事项,以免用户卡住:

  • 您需要等待loaderror,这样页面就不会在图片加载失败时卡住。
  • 您应该设置最大超时时间。
  • 此外,在您的代码中,i 是一个全局变量(没有 var 声明)。

使用方法如下:

var images = [ "backgrounds/bg1.jpg",
    "backgrounds/bg2.jpg",
    "backgrounds/bg3.jpg",
    "backgrounds/bg4.jpg"];

preload(images, 10000 /* 10s */, function () {
  window.location = 'next_page';
});

关于javascript - 加载图像后重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14610771/

相关文章:

javascript - 我们如何在 Angular 2 中编写基本单元测试?

javascript - 将特定上下文绑定(bind)到事件处理程序 : Understanding functional context, 返回语句和闭包?

javascript - 在 ReactJS 中用 Jquery 替换 JSON 时未定义“$”

java - 暂停 Swing GUI

javascript - Bootstrap 选择器的链式下拉菜单不起作用

apache - 将所有 HTTP 请求(非 www 和 www,子域)重定向到 HTTPS

c - 将串行数据重定向到以太网数据

java - 阻止 Google App Engine 从 appspot.com 提供服务

javascript - 加载 jQuery,等待

wait - 如何让期望脚本等到shell脚本完成