在加载图像时显示加载gif

时间:2015-04-20 08:15:01

标签: javascript jquery image

我制作了一些代码,用户可以从zip上传一些图像。在下一页中,我需要在85 * 85像素的帧中分别显示所有图像。

问题是加载所有图像可能需要一些时间。 所以我想在用户等待加载图片时显示加载gif。

我已将图片的src设置为the loading gifs,而我创建了一些复选框,其中真实来源为id

echo "<td><img src=\"beelden/ajax-loader-black-16.png\" id=\"img".$image."\" style=\" width: 85px; height: 85px; border: 1px solid gray; background-color: #fff; padding: 10px;\">";
echo "<input type=\"checkbox\" id=\"img[".$image."]\" name=\"check_image[]\" value=\"".$filename."\" /></td>";
<input type="hidden" name="aantal" id="aantal" value="<?=$image?>" >

然后我创建了一些javascript来检查图像是否已加载,当它被加载时,它应该替换图像的来源。

<script>
    var aantal = document.getElementById("aantal").value;
    for(var i = 0; i < aantal; i++){
        var source = document.getElementById("img["+i+"]").value;
        var img = new Image();
        img.onload = function(){
            $("#img"+i).attr('src', source);
        }();
        img.src = source;
    }
</script>

但这并不像我预期的那样工作,我认为只要加载第一个图像就会触发所有图像。任何想法我做错了什么或如何解决这个问题?

2 个答案:

答案 0 :(得分:27)

您可以将图像的背景设置为加载gif。这是一个简单的CSS技巧。你不需要制作一个js脚本。

&#13;
&#13;
.loading {
  background: transparent url('http://thinkfuture.com/wp-content/uploads/2013/10/loading_spinner.gif') center no-repeat;
}
&#13;
<img class="loading" src="http://placehold.it/106&text=1" width="106px" height="106px" />
<img class="loading" src="http://placehold.it/106&text=2" width="106px" height="106px" />
<img class="loading" src="http://placehold.it/106&text=3" width="106px" height="106px" />
<img class="loading" src="http://placehold.it/106&text=4" width="106px" height="106px" />
<img class="loading" src="http://placehold.it/106&text=5" width="106px" height="106px" />
<img class="loading" src="http://placehold.it/106&text=6" width="106px" height="106px" />
<img class="loading" src="http://placehold.it/106&text=7" width="106px" height="106px" />
&#13;
&#13;
&#13;

更新:

如果您有透明图像,那么故事就会变得更复杂,但仍然可以用css和一些div元素完成。

&#13;
&#13;
.image-wrapper {
  overflow: hidden;
  width: 106px;
  height: 106px;
  display: inline-block;
}

.image-wrapper img {
  float: left;
  display: block;
  opacity: 0.2; /* simulating a semitransparent image */
}

.image-wrapper:after, .loading {
  content: ' ';
  background: transparent url('http://thinkfuture.com/wp-content/uploads/2013/10/loading_spinner.gif')  center no-repeat ;
  background-size : auto 100%;
  width: 106px;
  height: 106px;
  float: left;
  display: block;
}
&#13;
<div class="image-wrapper">
  <!-- simulates a hard loading image -->
  <img src="http://placehold.it/not-existing" alt="" />
</div>
<div class="image-wrapper">
  <img src="http://placehold.it/106x106&text=2" alt="" />
</div>
<div class="image-wrapper">
  <img src="http://placehold.it/106x106&text=3" alt="" />
</div>
<div class="image-wrapper">
  <img src="http://placehold.it/106x106&text=4" alt="" />
</div>
<div class="image-wrapper">
  <img src="http://placehold.it/106x106&text=5"  alt="" />
</div>
<div class="image-wrapper">
  <img src="http://placehold.it/106x106&text=6"  alt="" />
</div>
<div class="image-wrapper">
  <img src="http://placehold.it/106x106&text=7"  alt="" />
</div>
&#13;
&#13;
&#13;

不幸的是,浏览器在加载时添加了损坏的图标或?,这就是图片包含空alt;

的原因

更新2:

第二种变体在很大程度上依赖于图像大小,如果你的大小不同,加载的gif不会被正确地推开,作为另一种选择,可以使用第一个变体和一个小的js脚本。加载图像后立即删除背景:

&#13;
&#13;
$('img').load(function(){
   $(this).css('background','none');
});
&#13;
   .loading {
      background: transparent url('http://thinkfuture.com/wp-content/uploads/2013/10/loading_spinner.gif') center no-repeat;
    }
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<img class="loading" src="http://upload.wikimedia.org/wikipedia/en/2/2d/SRU-Logo-Transparent.png" width="106px" height="106px" />
    <img class="loading" src="http://placehold.it/106&text=2" width="106px" height="106px" />
    <img class="loading" src="http://placehold.it/106&text=3" width="106px" height="106px" />
    <img class="loading" src="http://placehold.it/106&text=4" width="106px" height="106px" />
    <img class="loading" src="http://placehold.it/106&text=5" width="106px" height="106px" />
    <img class="loading" src="http://placehold.it/106&text=6" width="106px" height="106px" />
    <img class="loading" src="http://placehold.it/106&text=7" width="106px" height="106px" />
&#13;
&#13;
&#13;

答案 1 :(得分:1)

带有Hostlistener和Hostbinding的Angular 8解决方案。

1。创建一个简单的属性指令

@Input('src') imageSrc;

@Hostlistener('load') loadImage(){
this.srcAttr=this.imageSrc;}

@HostBinding('attr.src') srcAttr="../../loader.svg";

基本上,我们将初始图像源设置为加载器图像。加载图像(触发加载事件)后,我们将进行聆听并将图像源设置为实际图像。

2。现在,只需要在图像上使用创建的属性即可。

<img imgLoader src='image.jpg'>

使用svg不需要更改样式,gif可能需要更改CSS。

您可以访问website进行有效的实施。