Pir*_*oul 9 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?>" >
Run Code Online (Sandbox Code Playgroud)
然后我创建了一些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>
Run Code Online (Sandbox Code Playgroud)
但这并不像我预期的那样工作,我认为只要加载第一个图像就会触发所有图像.我有什么想法或者如何解决这个问题?
Tib*_* C. 36
您可以将图像的背景设置为加载gif.这是一个简单的CSS技巧.你不需要制作一个js脚本.
.loading {
background: transparent url('http://thinkfuture.com/wp-content/uploads/2013/10/loading_spinner.gif') center no-repeat;
}Run Code Online (Sandbox Code Playgroud)
<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" />Run Code Online (Sandbox Code Playgroud)
如果你有透明的图像,那么故事就会变得有点复杂,但仍然可以用css和一些div元素完成.
.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;
}Run Code Online (Sandbox Code Playgroud)
<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>Run Code Online (Sandbox Code Playgroud)
不幸的是,浏览器添加了一个破碎的图标或一次?加载,这就是图像包含空的原因alt;
第二个变体非常依赖于图像大小,如果你有不同的大小,加载gif将不会被正确推开,作为替代方案将使用第一个变体和一个小js脚本,将尽快删除背景在加载图片时:
$('img').load(function(){
$(this).css('background','none');
});Run Code Online (Sandbox Code Playgroud)
.loading {
background: transparent url('http://thinkfuture.com/wp-content/uploads/2013/10/loading_spinner.gif') center no-repeat;
}Run Code Online (Sandbox Code Playgroud)
<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" />Run Code Online (Sandbox Code Playgroud)
带有 Hostlistener 和 Hostbinding 的 Angular 8 解决方案。
1. 创建一个简单的属性指令
import { Directive, HostListener, Input, HostBinding } from '@angular/core';
@Directive({selector: '[imageLoader]'})
export class ImageLoaderDirective
{
@Input('src') imageSrc;
@HostListener('load')
loadImage()
{
this.srcAttr=this.imageSrc;
}
@HostBinding('attr.src') srcAttr="../../assets/pics/Loader.svg"
constructor() { }
}
Run Code Online (Sandbox Code Playgroud)
基本上我们将初始图像源设置为加载器图像。一旦图像加载(加载事件触发),我们监听它并将图像源设置为实际图像。
2. 现在使用只需要在您的图像上使用创建的属性。
<img imageLoader src='image.jpg'>
Run Code Online (Sandbox Code Playgroud)
使用 svg 不需要更改样式,gif 可能需要更改 css。
您可以访问网站进行工作实施。
| 归档时间: |
|
| 查看次数: |
36958 次 |
| 最近记录: |