【问题标题】:preload an array of images with jquery使用 jquery 预加载图像数组
【发布时间】:2010-10-05 10:42:56
【问题描述】:

我正在使用 jQuery 从 php 数组构建图像数组。我想循环浏览这些图像,预加载它们,同时显示一点加载 gif,直到所有图像都加载完毕。

目前,我已经尝试了很多这样做的方法,页面的其余部分似乎总是在继续加载,因此图像正在预加载,但不是在页面加载其余内容之前。

这是我所拥有的:

 <script type="text/javascript">

  // Get list of images and build array + set vars

  var imgArray = new Array;
  var imgCount = <?php echo count($files); ?>;
  var imgNum = <?php echo $rand; ?>;
  var imgDir = "<?php echo $dir; ?>";
  var imgBlurDir = "<?php echo $blurdir; ?>";


 $(document).ready(function() {

  <?php
   for ($i=0;$i<count($files);$i++) {
    echo "imgArray[$i]='" . $files[$i] . " ' ; \n";
   }
  ?>


  // Preload Images:
  $('mainImg #orig').html('<img src="images/preload.gif" style="position: relative; top: 310px;" />');
  for(i=0; i<imgCount; i++) { 
   $('<img>').attr("src", imgDir+imgArray[i]).load(function() { $('.profile').append( $(this) )});
   $('<img>').attr("src", imgBlurDir+imgArray[i]).load(function() { $('.profile').append( $(this) )});
  }

  // ^^^^ this doesnt work yet...

  $('#mainImg #orig').html("<img src='"+imgDir+imgArray[imgNum]+"' />").delay(10).fadeIn(1000);
 });

</script>

如您所见,#orig 设置为显示 preload.gif,然后应预加载图像,然后 #orig 应更改并淡入当前在数组中选择的图像。这不会发生,我从来没有看到 gif 并且图像在页面加载后会继续加载一段时间。

请多多指教,提前多谢!

【问题讨论】:

  • 有点离题... 像这样初始化 imgArray 看起来更简单:var imgArray = ["&lt;?php echo implode($files, '", "'); ?&gt;"];.
  • @Edgar Bonet:是的,说得好。不过我更喜欢 OP 的方式,它对我来说更具可读性。

标签: jquery preload image-preloader


【解决方案1】:

您正在创建一个字符串并将其插入到文档中,它应该成为 DOM 的一部分。你需要做的是创建一个 JS Image 对象,有点像这样:

// Preload Images:
for(i=0; i<imgCount; i++) { 
  var image_preload = new Image();
  image_preload.src = imgDir+imgArray[i];
}

【讨论】:

  • 感谢您的快速回复。这工作我可以看到图像正在加载,但是在图像加载时页面的其余部分仍在加载?
  • @Lunarben:由于代码块在 `$(document).ready` 中,它会在 DOM 加载后立即被调用——也就是说,页面的某些部分仍然可以加载(其他图像、样式表 IIRC 等)。
  • 我没想到!现在似乎工作正常。非常感谢你! :)
猜你喜欢
  • 2011-04-13
  • 1970-01-01
  • 1970-01-01
  • 2011-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多