还是 部分图片不显示,刷新后又显示 的问题,再一贴,望能遇到高人

zpcoder 2011-02-27 12:27:09
网址:http://www.psa001.com

大家可以分别点击 “ 最新图片 | 热门作品 | 精品赏析 | 推荐作品 …… ”

会发现有一部分图片没有显示出来,一部分正别显示。根据检测,未显示出的图片是正常。因为一刷新当前页面,即可显示。

(这应该可以说明图片本身是不有问题的)


问题与老贴说的问题相同。
老贴子位置:http://topic.csdn.net/u/20101005/09/39153bbc-0da6-4fe5-a5a3-ebbb94438631.html


巧合的是这两个网站我为了无论是横向的长图还是纵向的长图都 按比例缩放到适应相框大小.用了以下一段 JS,不知是否有问题,望各位指点。

暂排除网速问题,我在多处网速快的地方测试过。
HTML: <img src="abc/20110226221853_thumb.jpg" border="0" onload="changeImageSize(this,140,105);" />

function changeImageSize(obj,pw,ph)
{
var w=obj.width; //图片宽度
var h=obj.height; //图片高度

var l=w/h; //图片宽度高度比率
var pl=pw/ph; //容器宽度高度比率

if(l>=pl)
{
if(w>pw)
{
w=pw;
h=w/l
}
}
else
{
if(h>ph)
{
h=ph;
w=h*l;
}
}

obj.style.width=Math.round(w)+"px";
obj.style.height=Math.round(h)+"px";
}
...全文
415 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
汉尼拔 2011-03-13
  • 打赏
  • 举报
回复
这帖子不能沉
liwei067 2011-03-13
  • 打赏
  • 举报
回复
貌似图片的onload的事件不会执行 只有body 的onload事件会执行
  • 打赏
  • 举报
回复
哦,要关闭时扫了一眼,忽然发现我有个地方可能想岔了。看了一下原来代码,果然是。我只想着容器比例,就用了小尺寸去测试,结果就错了。

一开始就没仔细看代码,过程也没有想这个函数的实际意义,因为楼主不把原来主要代码放在这里,只让看那个网站页面,这里只放这么一小段,所以就对这段代码能否说明问题产生了不信任感。我一般不喜欢看外面的链接。到现在也是,最好是主要代码直接贴这里。

为了消除上面我发的几个发昏的回答的影响,只要这个问题还没解决,你把代码贴这里,我尽量帮你解决。
  • 打赏
  • 举报
回复
我在7楼后面说我以前用IMG的ONLOAD,就是普普通通地用,完全没有问题,不管图片数量多少,图片体积多大。

我在9楼,把取图片的代码改成直接赋值了。这样已经排除获得图片尺寸可能有异常的情况了。
所以结果应该很明显了,你还这样说吗?那就想去吧。至于你这个算法为什么后来得出这样的结果,本来有心情还可以帮你看看具体是怎么回事,可你这样说,实在让我没心情再管你了。爱听谁听谁的吧。
kaifadi 2011-03-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 agclqq 的回复:]

由访问网站的体验,认为过大图片集中加载,过大图片未能完整加载成功时,就去重置计算了图片大小,导致楼主上述现像。有两种解决方案:
1.使用lazyload方式。详细请看我的博客
-----------------------------------------------
2.使用每个图片逐渐加载方式。
这里我采用了jquery的一些方法,你也可以改写为普通JS方法
JScript co……
[/Quote]
这个分析得很精辟,不错,学习了!
Cool_xiaocao 2011-03-12
  • 打赏
  • 举报
回复
这个网站不错呢
汉尼拔 2011-03-12
  • 打赏
  • 举报
回复
我也遇到同样的问题,一直没有解决.

即使是用一个局域网内用域名访问也出现这样的问题.
我用的是iis5.0服务器

希望和楼主共同解决
zpcoder 2011-03-12
  • 打赏
  • 举报
回复

绕了半天倒底是哪的错哦。

“刷新的时候,不会再执行图片的onload事件,所以才显示了图片的原尺寸。” 如果真是这样的话,那显示的时候就没有 changeImageSize() 了呀。那又为什么显示出来的所谓的“原图”可以容器中按比例显示出来。没有撑大,也没有被容器裁剪?


4搂的方法研究中……
  • 打赏
  • 举报
回复
<script type="text/javascript">
function theforever_csdn(obj,pw,ph) {
var w=300,h=200; //不取图片尺寸,直接赋值,随意传参不影响
var l=w/h; //图片宽度高度比率
var pl=4/3; //容器宽度高度比率,直接设置,随意传参不影响
if(l>=pl)
{
if(w>pw)
{
w=pw;
h=w/l
}
}
else
{
if(h>ph)
{
h=ph;
w=h*l;
}
}
alert(w+"px"+'-----'+h+"px");
}
</script>
结果输出,宽4px,高3px。当然看不见。与传递进来的图片尺寸是否初始成功无关。
刷新的时候,不会再执行图片的onload事件,所以才显示了图片的原尺寸。
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 theforever 的回复:]
(如果公式有问题,刷新也不会正常)。[/Quote]
这个还真不好说啊!!F5刷新的时候,好像是不会再执行onload事件的,所以也就不会被调整了。
还是公式有问题!
  • 打赏
  • 举报
回复
好像4楼说得对。我只用一个小图片和一个比例测试输出了一下结果值,发现或者是4PX,或者是1PX。忘了楼主说刷新一次就正常的事情了(如果公式有问题,刷新也不会正常)。

不过我很久前做的一个批量看图小工具,现在也在用,表现就没有问题。我这个还是一次会显示几百上千的图片,包括大图。无论是取尺寸还是加载后缩放尺寸都没有问题。就是在onload里调整,没用什么特殊机制。所以我开始很怀疑是计算公式有问题。
xiangwendong 2011-02-28
  • 打赏
  • 举报
回复
完全可以显示嘛 我这里打开没的问题的
mingshao520023 2011-02-28
  • 打赏
  • 举报
回复
同意四楼的话!
agclqq 2011-02-28
  • 打赏
  • 举报
回复
由访问网站的体验,认为过大图片集中加载,过大图片未能完整加载成功时,就去重置计算了图片大小,导致楼主上述现像。有两种解决方案:
1.使用lazyload方式。详细请看我的博客
-----------------------------------------------
2.使用每个图片逐渐加载方式。
这里我采用了jquery的一些方法,你也可以改写为普通JS方法

$(function(){
for(i=0;i<$(".sb img").length;i++)
{
$(".sb img:eq("+i+")").ready(){
function(){
changeImageSize($(".sb img:eq("+i+")"),140,105);
}
}

}
});

另外说一点,在你的changeImageSize方法里,检查一下obj的类型是否为object类型,以便于确定参数的有效性。

希望能解决你的问题
  • 打赏
  • 举报
回复
你计算公式有问题。算出的结果很小,尺寸小到看不出来了。小学算术啊,自己反思吧。
xuxubaby 2011-02-28
  • 打赏
  • 举报
回复
并非一定是程序的问题,也可能是域名解析那边的问题,他们的域名解析服务器不稳定。
还有可能就是空间的问题,空间不稳定出现丢包现象,建议换个空间试试然后换个域名,最后找出问题所在。
hongmei85 2011-02-27
  • 打赏
  • 举报
回复
<img src="abc/20110226221853_thumb.jpg" border="0" onload="changeImageSize(this,140,105);" />
这里改为这样试试
<img onload="changeImageSize(this,140,105);" src="abc/20110226221853_thumb.jpg" border="0" />

87,907

社区成员

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

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