网址: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";
}

解决方案 »

  1.   

    <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" />
      

  2.   

    由访问网站的体验,认为过大图片集中加载,过大图片未能完整加载成功时,就去重置计算了图片大小,导致楼主上述现像。有两种解决方案:
    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类型,以便于确定参数的有效性。希望能解决你的问题
      

  3.   

    好像4楼说得对。我只用一个小图片和一个比例测试输出了一下结果值,发现或者是4PX,或者是1PX。忘了楼主说刷新一次就正常的事情了(如果公式有问题,刷新也不会正常)。不过我很久前做的一个批量看图小工具,现在也在用,表现就没有问题。我这个还是一次会显示几百上千的图片,包括大图。无论是取尺寸还是加载后缩放尺寸都没有问题。就是在onload里调整,没用什么特殊机制。所以我开始很怀疑是计算公式有问题。
      

  4.   

    这个还真不好说啊!!F5刷新的时候,好像是不会再执行onload事件的,所以也就不会被调整了。
    还是公式有问题!
      

  5.   

    <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事件,所以才显示了图片的原尺寸。
      

  6.   


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

  7.   

    我也遇到同样的问题,一直没有解决.即使是用一个局域网内用域名访问也出现这样的问题.
    我用的是iis5.0服务器希望和楼主共同解决
      

  8.   

    我在7楼后面说我以前用IMG的ONLOAD,就是普普通通地用,完全没有问题,不管图片数量多少,图片体积多大。我在9楼,把取图片的代码改成直接赋值了。这样已经排除获得图片尺寸可能有异常的情况了。
    所以结果应该很明显了,你还这样说吗?那就想去吧。至于你这个算法为什么后来得出这样的结果,本来有心情还可以帮你看看具体是怎么回事,可你这样说,实在让我没心情再管你了。爱听谁听谁的吧。
      

  9.   

    貌似图片的onload的事件不会执行 只有body 的onload事件会执行