Javascript 确定是否加载已更改的图像
我正在使用jQuery创建一个小图库,并停留在一个小问题上 是这样的:Javascript 确定是否加载已更改的图像,javascript,jquery,Javascript,Jquery,我正在使用jQuery创建一个小图库,并停留在一个小问题上 是这样的: <script type="text/javascript"> $(document).ready(function(){ $('#thumb1').click(function(){ $('#fullimage').attr('src','loading.gif').fadeOut(800,function(){ $(this).attr('src','newimag
<script type="text/javascript">
$(document).ready(function(){
$('#thumb1').click(function(){
$('#fullimage').attr('src','loading.gif').fadeOut(800,function(){
$(this).attr('src','newimage.jpg').bind('onreadystatechange load', function(){
$(this).fadeIn(300);
});
});
});
//same code for $('#thumb2') etc.
});
</script>
<img src="defaultimage.jpg" id="fullimage" /><br />
<a><img id="thumb1" src="notimportantthumb.jpg"></a>
<a><img id="thumb2" src="notimportantthumb2.jpg"></a>
$(文档).ready(函数(){
$('#thumb1')。单击(函数(){
$('#fullimage').attr('src','loading.gif').fadeOut(800,function(){
$(this.attr('src','newimage.jpg').bind('onreadystatechange load',function(){
美元(本).fadeIn(300);
});
});
});
//美元(“#拇指2”)等的代码相同。
});
问题是,如果加载图像的时间超过800毫秒,它将无法工作
我知道我必须使用jQuery的load()或类似函数,但我无法将其组合在一起。如何识别是否加载了使用jQuery更改的图像?
谢谢
编辑:通过添加第二个隐藏图像作为加载程序解决。如果有人感兴趣:
<script type="text/javascript">
$(document).ready(function(){
$('#thumb1').click(function(){
if ($('#fullimage').attr('src')!='newimage.jpg') { //it would not load, just show the loading.gif
$('#fullimage').hide(); $('#hiddenloader').show();
$('#fullimage').attr('src','newimage.jpg').load(function(){
$('#hiddenloader').fadeOut(300,function(){
$('#fullimage').fadeIn(300);
});
});
}
});
//same code for $('#thumb2') etc.
});
</script>
<img src="defaultimage.jpg" id="fullimage" /><br />
<img src="loading.gif" id="hiddenloader" style="display: none;" />
<a><img id="thumb1" src="notimportantthumb.jpg" /></a>
<a><img id="thumb2" src="notimportantthumb2.jpg" /></a>
$(文档).ready(函数(){
$('#thumb1')。单击(函数(){
如果($('#fullimage').attr('src')!='newimage.jpg'){//它不会加载,只显示loading.gif
$('fullimage').hide();$('hiddenloader').show();
$('#fullimage').attr('src','newimage.jpg').load(函数(){
$('hiddenloader').fadeOut(300,function(){
$('fullimage').fadeIn(300);
});
});
}
});
//美元(“#拇指2”)等的代码相同。
});
每当src属性更改且图像完成加载时,onload事件都应触发
编辑代码示例:
$('#thumb1').click(function(){
$('#fullimage').attr('src','loading.gif').fadeOut(800,function(){
$(this).attr('src','newimage.jpg').load(function(){
$(this).fadeIn(300);
});
});
});
尽管我会说,这种呈现加载程序映像的方法有点不寻常。每当src属性更改并且映像完成加载时,onload事件都会触发 编辑代码示例:
$('#thumb1').click(function(){
$('#fullimage').attr('src','loading.gif').fadeOut(800,function(){
$(this).attr('src','newimage.jpg').load(function(){
$(this).fadeIn(300);
});
});
});
尽管我会说这种呈现加载程序映像的方法有点不寻常。您可以在加载时预加载映像吗
您可以在加载时预加载图像吗
你为什么给它加载.gif,然后淡出它?在淡出之前,您不会将
newimage.jpg
分配给src,那么800ms与此有什么关系?如果单击缩略图更改器图像,我想立即将源更改为loading.gif,然后如果要更改的图像已加载,我想淡出,更改源,然后淡出。800毫秒是由我组成的(就像一个平均的图像加载时间),只需在这里发布并解释我所处的位置。是的,但现在的方式是,你给它load.gif
,然后你立即淡出它,然后淡出完成后,你分配newimage.jpg
。因此,新图像只有在加载的图像消失后才会开始加载。为什么要先给它loading.gif
,然后将其淡出?在淡出之前,您不会将newimage.jpg
分配给src,那么800ms与此有什么关系?如果单击缩略图更改器图像,我想立即将源更改为loading.gif,然后如果要更改的图像已加载,我想淡出,更改源,然后淡出。800毫秒是由我组成的(就像一个平均的图像加载时间),只需在这里发布并解释我所处的位置。是的,但现在的方式是,你给它load.gif
,然后你立即淡出它,然后淡出完成后,你分配newimage.jpg
。因此,新图像在加载图像消失之前不会开始加载。我也这么认为,但悲伤地预加载不是一个选项。我也这么认为,但悲伤地预加载不是一个选项。编辑答案以包含示例代码。正如您所看到的,您已经非常接近了。老实说,我看不出您的代码和我的代码有什么区别,只是我绑定了ReadyStateChange和load。我需要的不是在800毫秒内淡出,然后更改img src,而是在加载图像后更改。标记为已接受,因为您的注释鼓励了我一个技巧,它可以完美地工作(添加到顶部),谢谢!呵呵,我是一个好男人。我想到了这个解决方案,并试图用jQuery编写它。。。惨淡!我不想给你一个mootools或香草解决方案,因为你在jQuery中。很高兴你成功了!编辑答案以包含示例代码。正如您所看到的,您已经非常接近了。老实说,我看不出您的代码和我的代码有什么区别,只是我绑定了ReadyStateChange和load。我需要的不是在800毫秒内淡出,然后更改img src,而是在加载图像后更改。标记为已接受,因为您的注释鼓励了我一个技巧,它可以完美地工作(添加到顶部),谢谢!呵呵,我是一个好男人。我想到了这个解决方案,并试图用jQuery编写它。。。惨淡!我不想给你一个mootools或香草解决方案,因为你在jQuery中。很高兴你成功了!