图片加载完成执行动作的问题

sdts 2006-07-11 04:02:03
<img src="a.jpg" width=120 height=120 onreadystatechange=go(this)>
<img src="b.jpg" width=120 height=120 onreadystatechange=go(this)>
<img src="c.jpg" width=120 height=120 onreadystatechange=go(this)>
<img src="d.jpg" width=120 height=120 onreadystatechange=go(this)>

<script language="javascript" type="text/javascript">
//客户端调整图片按原比例输出
var PicWidthStr = 120;
var PicHeightStr = 120;
function go(obj){
//if(obj.readyState == "complete")
//{//图片加载完毕的标志
//alert(obj.readyState);
var iobj = new Image();
iobj.src = obj.src;
//alert(iobj.width);
var width = iobj.width;
var height = iobj.height;
var hpw = height/width;
if(hpw>1)
{
if(height>PicHeightStr)
{
height = PicHeightStr;
width = Math.floor(height/hpw);
}
}
else
{
if(width>PicWidthStr)
{
width = PicWidthStr;
height = Math.floor(width*hpw);
}
}
obj.width=width;
obj.height=height;
//}
}
function gout()
{
alert("图片加载未完成!");
}
function imgstate()
{
alert(document.images);
for(i=0;i<document.images.length;i++)
{
alert(document.images[i].readyState);
}
}
imgstate();
</script>

目的是先让所有的图片都以120X120显示,然后在120X120的范围内按图片的原比例显示,这个过程在客户端用JS完成,go()就是调整函数。

问题是当页面图片较多时【我测试的时候是16幅】,就会出现部分图片没有调整的情况。

我用的是onreadystatechange()触发事件,也用onload()测试过,都有同样的问题,但是用imgstate()检测一下所有图片的状态,都是“complete”,为什么还会有没有调整的情况?

谢谢了!
...全文
526 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdts 2006-07-13
  • 打赏
  • 举报
回复
在网络传输速度比较慢或者图片下载量比较大的时候可能经常会出现
BlueDestiny 2006-07-12
  • 打赏
  • 举报
回复
为什么用onreadystatechange而不直接用onload事件
sdts 2006-07-12
  • 打赏
  • 举报
回复
因为直接用obj.width得到的是定义的width,所以用了一个iobj,这样得到的是图片的原始尺寸

我不知道用offsetWidth可以得到,这样的话就不用new Image()了

根本的问题是图片多了时会有部分图片没有调整完成。。。。。。。
kabakaba 2006-07-12
  • 打赏
  • 举报
回复
mark
Taciterry 2006-07-12
  • 打赏
  • 举报
回复
看看我刚写的

<img src="http://localhost/UserFiles/SmileyImages/pretty_smile.jpg" onreadystatechange=resizeImg(this)>
<img src="http://zi.csdn.net/business/zhaopin_2/images/pic_03.gif" onreadystatechange=resizeImg(this)>

<script language="javascript" type="text/javascript">
function resizeImg(object){
if(object.readyState=="complete"){
var imgWidth=200;
var imgHeight=200;
var objImgWidth=object.offsetWidth;
var objImgHeight=object.offsetHeight;
var WidthHeightRate=objImgWidth/objImgHeight;
if(WidthHeightRate>1){
object.width=imgWidth;
object.height=imgWidth/WidthHeightRate;
}
if(WidthHeightRate==1){
object.width=imgWidth;
object.height=imgHeight;
}
if(WidthHeightRate<1){
object.height=imgHeight;
object.width=imgHeight*WidthHeightRate;
}
}
}
</script>
Taciterry 2006-07-12
  • 打赏
  • 举报
回复
搞不动你为什么要var iobj = new Image();直接计算不是更好吗
Taciterry 2006-07-12
  • 打赏
  • 举报
回复
不会啊~~~
http://studentempire.org/test/test.htm
sdts 2006-07-12
  • 打赏
  • 举报
回复
是指定义了 img的width height的情况下,如果一开始不定义范围大小,就有可能出现图片先以原始尺寸显示然后缩放的现象
sdts 2006-07-12
  • 打赏
  • 举报
回复
试验了一下 offsetWidth得不到原始图片尺寸
BlueDestiny 2006-07-12
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topic/4875/4875265.xml?temp=.1705133
Taciterry 2006-07-12
  • 打赏
  • 举报
回复
我写的那个调用是
<img src="http://localhost/UserFiles/SmileyImages/pretty_smile.jpg" onreadystatechange=resizeImg(this) />
注意没有指明长宽,这样就是默认的长宽,然后用offset取偏移量
sdts 2006-07-12
  • 打赏
  • 举报
回复
没有特意要用onreadystatechange 用onload也一样
sdts 2006-07-11
  • 打赏
  • 举报
回复
onload有同样的问题
wideroad 2006-07-11
  • 打赏
  • 举报
回复
用onload方法
sdts 2006-07-11
  • 打赏
  • 举报
回复
改变思路解决问题了
在imgstate里完成调整
function imgstate()
{
//alert(document.images);
for(i=0;i<document.images.length;i++)
{
go(document.images[i]);
}
}
imgstate();

这样就都调整了,但还是想搞清楚上面到底是什么原因造成的

87,907

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧