簡體   English   中英

加載圖像后重定向

[英]Redirect after loading images

因此,我最近一直在開發一個站點,問題是每個頁面的背景都是圖像,結果,在連接速度較慢的情況下(某些目標受眾是這種情況),圖像在下載時會逐步加載到解決此問題,我試圖制作一個執行以下操作的預加載頁面:

  • 加載圖像
  • 加載完成后,將用戶重定向到請求的頁面

     <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';
});

修改您的預加載器,使其綁定到Image對象的“ onload”事件,並在觸發所有回調時將其重定向(下面的未試用示例代碼):

var images = new Array()
var count = 0;
function preload() {
    var numImages = preload.arguments.length
    for (i = 0; i < numImages; i++) {
        images[i] = new Image();
        images[i].onload = doneLoading; // See function below.
        images[i].src = preload.arguments[i];
    }
    function doneLoading() {
        if (++count >= numImages) {
            window.location = "index.html";
        }
    }
}
preload(
    "backgrounds/bg1.jpg",
    "backgrounds/bg2.jpg",
    "backgrounds/bg3.jpg",
    "backgrounds/bg4.jpg"
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM