没测试代码,看不出什么效果,不过你的是for循环,ie和firefox应该也不可能看到1条加完等待一下在添加另外一条的效果吧,这个执行时间肉眼分辨不出来吧。要是你要哪种效果,可以用setTimeout延时来执行,不用for语句
var i = 0; function addDiv() {
var bone, btwo, bthree, shotCol;
bone = document.getElementById("cols1").offsetHeight;
btwo = document.getElementById("cols2").offsetHeight;
bthree = document.getElementById("cols3").offsetHeight;
var div = document.createElement("div");
div.className = "img_box";
div.innerHTML = '<img src="images/' + Math.ceil(Math.random() * 7) + '.jpg" width="300px" />';
if (bone - btwo <= 0 && bone - bthree <= 0) {
shotCol = "cols1";
}
else if (btwo - bone <= 0 && btwo - bthree <= 0) {
shotCol = "cols2";
}
else {
shotCol = "cols3";
}
document.getElementById(shotCol).appendChild(div);
i++;
if (i < 2) setTimeout(addDiv, 500);////////
}
setTimeout(addDiv, 500);
var i = 0; function addDiv() {
var bone, btwo, bthree, shotCol;
bone = document.getElementById("cols1").offsetHeight;
btwo = document.getElementById("cols2").offsetHeight;
bthree = document.getElementById("cols3").offsetHeight;
var div = document.createElement("div");
div.className = "img_box";
div.innerHTML = '<img src="images/' + Math.ceil(Math.random() * 7) + '.jpg" width="300px" />';
if (bone - btwo <= 0 && bone - bthree <= 0) {
shotCol = "cols1";
}
else if (btwo - bone <= 0 && btwo - bthree <= 0) {
shotCol = "cols2";
}
else {
shotCol = "cols3";
}
document.getElementById(shotCol).appendChild(div);
i++;
if (i < 2) setTimeout(addDiv, 500);////////
}
setTimeout(addDiv, 500);
解决方案 »
- 请教大家一个问题
- 求助个问题
- 系统自带的哪个ActiveX可以监听某个端口的消息和发送消息到某台机器的指定端口?
- Extjs异常:Uncaught TypeError: Cannot read property 'internalId' of undefined
- 有没有可以在IE和FIXFOX下都能正常运行的树控件?CSDN的都不行。
- 请问 大家有没有用ARCIMS的JAVAVIEWER例子进行开发的?
- 关于links 的onclick事件问题?? 怎么在body 的 onLoad 事件中禁用 所有的联接???
- 一个关于onSubmit的简单问题
- 又让大家费心了,好心的人请帮我!!!
- JavaScript中setInterval不能正确延时?
- 菜鸟求教,jquery选择器的问题
- 如何将输入的值进行转为特定字符串?
div.innerHTML = '<img src="images/' + Math.ceil(Math.random() * 7) + '.jpg" width="300px" />';
//1、改为:
var img = document.createElement("img");
img.style.width="300px";
img.src="images/" + Math.ceil(Math.random() * 7) + ".jpg";
div.appendChild(img);
//2、或者移动到document.getElementById(shotCol).appendChild(div);之后
这位亲的办法也不OK。我现在声明下我找到的问题的地方是:在IE,FF下,单词循环的时候,会每次循环之内就执行document.getElementById(shotCol).appendChild(div); 这个符合所有的for循环标准。但是chrome则不同,chrome认为变量shotCol一直没有变化,所以会等整个for循环跑完之后才统一执行。其实不然,因为每次循环如果执行了document.getElementById(shotCol).appendChild(div); 的话,则每次计算到的shotCol都是不同的。
这位亲的办法也不OK。我现在声明下我找到的问题的地方是:在IE,FF下,单词循环的时候,会每次循环之内就执行document.getElementById(shotCol).appendChild(div); 这个符合所有的for循环标准。但是chrome则不同,chrome认为变量shotCol一直没有变化,所以会等整个for循环跑完之后才统一执行。其实不然,因为每次循环如果执行了document.getElementById(shotCol).appendChild(div); 的话,则每次计算到的shotCol都是不同的。
你确定是按照我说的这样改了?
我测试时候使用相同的一张图片作为地址,则第一次shotCol=cols1,第二次shotCol=cols2,这样难道不对?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>瀑布流测试</title>
<script>window.onscroll = showPinterest;function showPinterest()
{
if(reachBottom())
{
var waitingBox = document.getElementById("waitingBox");
waitingBox.innerHTML = '<img src="images/loading.gif" />';
//setTimeout用来模仿后台取数据
window.onscroll = "";
setTimeout(function(){
document.getElementById("waitingBox").innerHTML = "";
for(var i=0; i<2; i++)
{
var bone,btwo,bthree,shotCol;
bone = document.getElementById("cols1").offsetHeight;
btwo = document.getElementById("cols2").offsetHeight;
bthree = document.getElementById("cols3").offsetHeight;
var div = document.createElement("div");
div.className = "img_box";
div.innerHTML = '<img src="images/'+Math.ceil(Math.random()*7)+'.jpg" width="300px" />';
if(bone - btwo <= 0 && bone - bthree <= 0)
{
shotCol = "cols1";
}
else if(btwo - bone <= 0 && btwo - bthree <= 0)
{
shotCol = "cols2";
}
else if(bthree - bone <= 0 && bthree - btwo <= 0)
{
shotCol = "cols3";
}
document.getElementById(shotCol).appendChild(div);
}
//window.onscroll = showPinterest;
},1000);
}
}
//检测是否到达浏览器底部,是返回true,否返回false
function reachBottom()
{
var isBottom,sHeight,sTop,cHeight;
if(document.compatMode == "BackCompat")
{
//document.compatMode == "BackCompat" IE标准兼容模式关闭
sHeight = document.body.scrollHeight;
sTop = document.body.scrollTop;
cHeight = document.body.clientHeight;
}
else
{
//document.compateMode == "CSS1Compat" IE标准兼容模式开启,此时IE同FF,和chrome稍有不同
sHeight = document.documentElement.scrollHeight;
sTop = document.documentElement.scrollTop==0? document.body.scrollTop: document.documentElement.scrollTop;
cHeight = document.documentElement.clientHeight;
}
isBottom = sHeight - sTop - cHeight;
if(isBottom == 0)
{
return true;
}
else
{
return false;
}
}
</script>
<style>
.cols_left{width:300px;margin-right:30px;height:auto;overflow:auto;float:left;}
.cols_right{width:300px;height:auto;overflow:auto;float:left;}
.img_box{width:300px;height:auto;overflow:hidden;margin-bottom:15px;box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);}
</style>
</head><body>
<div style="width:960px;margin-left:auto;margin-right:auto;height:auto;overflow:auto;">
<div id="cols1" class="cols_left">
<div class="img_box"><img src="images/1.jpg" width="300px" /></div>
<div class="img_box"><img src="images/4.jpg" width="300px" /></div>
<div class="img_box"><img src="images/7.jpg" width="300px" /></div>
</div>
<div id="cols2" class="cols_left">
<div class="img_box"><img src="images/2.jpg" width="300px" /></div>
<div class="img_box"><img src="images/5.jpg" width="300px" /></div>
<div class="img_box"><img src="images/1.jpg" width="300px" /></div>
</div>
<div id="cols3" class="cols_right">
<div class="img_box"><img src="images/3.jpg" width="300px" /></div>
<div class="img_box"><img src="images/6.jpg" width="300px" /></div>
<div class="img_box"><img src="images/2.jpg" width="300px" /></div>
</div>
</div>
<div id="waitingBox" style="margin-left:auto;margin-right:auto;"></div>
</body>
</html>
这位亲的办法也不OK。我现在声明下我找到的问题的地方是:在IE,FF下,单词循环的时候,会每次循环之内就执行document.getElementById(shotCol).appendChild(div); 这个符合所有的for循环标准。但是chrome则不同,chrome认为变量shotCol一直没有变化,所以会等整个for循环跑完之后才统一执行。其实不然,因为每次循环如果执行了document.getElementById(shotCol).appendChild(div); 的话,则每次计算到的shotCol都是不同的。
你确定是按照我说的这样改了?
我测试时候使用相同的一张图片作为地址,则第一次shotCol=cols1,第二次shotCol=cols2,这样难道不对?这位亲的原理是什么呢?我试过了,你的办法chrome下,还是老样子,上面我贴出了我的全部代码,你可以拷贝到本地用chrome单步调试一下,看问题在哪?(我的源代码只需找1-7.jpg的图片放在images/目录下即可)
如果LZ的意思是lazyload方式进行添加的话,那在#2中showbo已经给出了办法呀
如果LZ的意思是lazyload方式进行添加的话,那在#2中showbo已经给出了办法呀哇咔咔,没错,就是#2的办法解决了问题,用setTimeout来延迟执行,这样chrome就会正确加载了。这里我结贴之前总结一下:
1.for循环的时候,IE,和FF是实时更新了页面,所以能够正确算出各个列的offsetHeight;
2.chrome下,我猜测是 代码虽然改变了,但是页面没有被更新…一直到代码有一个较大时间的停顿的时候才会更新页面,所以会导致offsetHeight计算不正确;其实也可能是代码已经进去了…但是图片还没加载…所以拿到高度还是原来的高度…因为没加载图片,所以高度撑不起来…
3.所以解决办法就是用通用的延迟执行(延迟递归调用),这个时候不管是IE,FF 还是chrome都正确计算出了offsetHeight,也就能正确加载瀑布流了。给出我修复后的代码如下(只是替代for循环的那部分哈):
//添加子元素
var myTimeOutI=0;
function addElement()
{
var bone,btwo,bthree,shotCol;
bone = document.getElementById("cols1").offsetHeight;
btwo = document.getElementById("cols2").offsetHeight;
bthree = document.getElementById("cols3").offsetHeight;
var div = document.createElement("div");
div.className = "img_box";
div.innerHTML = '<img src="images/'+Math.ceil(Math.random()*7)+'.jpg" width="300px" />';
if(bone - btwo <= 0 && bone - bthree <= 0)
{
shotCol = "cols1";
}
else if(btwo - bone <= 0 && btwo - bthree <= 0)
{
shotCol = "cols2";
}
else if(bthree - bone <= 0 && bthree - btwo <= 0)
{
shotCol = "cols3";
}
document.getElementById(shotCol).appendChild(div);
myTimeOutI++;
if(myTimeOutI<10)
{
setTimeout(addElement,50);
}
if(myTimeOutI>=10)
{
window.onscroll = showPinterest;
}
}
addElement();
var bone = document.getElementById("cols1").offsetHeight,
btwo = document.getElementById("cols2").offsetHeight,
bthree = document.getElementById("cols3").offsetHeight,
colList = {},
_min = Math.min.apply(null,[bone,btwo,bthree]);
colList[bone] = 'cols1';
colList[btwo] = 'cols2';
colList[bthree] = 'cols3';
var shotCol = colList[_min],
div = document.createElement("div");
不过用#2提供的方法确实搞定了看来通用的办法就是setTimeout延迟对迪欧用然后再加载才OK
不过用#2提供的方法确实搞定了看来通用的办法就是setTimeout延迟对迪欧用然后再加载才OK
这个因为chrome是生成html后读图片后再设定高度 所以循环的时候高度为0 settimeout的时候图片没读完估计还是0
不过用#2提供的方法确实搞定了看来通用的办法就是setTimeout延迟对迪欧用然后再加载才OK
这个因为chrome是生成html后读图片后再设定高度 所以循环的时候高度为0 settimeout的时候图片没读完估计还是0
var img;
var i = 0;
function appendDiv(){
var bone,btwo,bthree,shotCol;
bone = document.getElementById("cols1").offsetHeight;
btwo = document.getElementById("cols2").offsetHeight;
bthree = document.getElementById("cols3").offsetHeight;
var div = document.createElement("div");
div.appendChild(img);
if(bone - btwo <= 0 && bone - bthree <= 0)
{
shotCol = "cols1";
}
else if(btwo - bone <= 0 && btwo - bthree <= 0)
{
shotCol = "cols2";
}
else
{
shotCol = "cols3";
}
document.getElementById(shotCol).appendChild(div)
i++;
if(i<2){
appendImg();
}
}
function appendImg(){
img = new Image();
//img.src = 'images/'+Math.ceil(Math.random()*7)+'.jpg';
img.src = '1.jpg';
img.style.height = "300px";
img.onload = appendDiv
};
appendImg();
如果LZ的意思是lazyload方式进行添加的话,那在#2中showbo已经给出了办法呀哇咔咔,没错,就是#2的办法解决了问题,用setTimeout来延迟执行,这样chrome就会正确加载了。这里我结贴之前总结一下:
1.for循环的时候,IE,和FF是实时更新了页面,所以能够正确算出各个列的offsetHeight;
2.chrome下,我猜测是 代码虽然改变了,但是页面没有被更新…一直到代码有一个较大时间的停顿的时候才会更新页面,所以会导致offsetHeight计算不正确;其实也可能是代码已经进去了…但是图片还没加载…所以拿到高度还是原来的高度…因为没加载图片,所以高度撑不起来…
3.所以解决办法就是用通用的延迟执行(延迟递归调用),这个时候不管是IE,FF 还是chrome都正确计算出了offsetHeight,也就能正确加载瀑布流了。给出我修复后的代码如下(只是替代for循环的那部分哈):
//添加子元素
var myTimeOutI=0;
function addElement()
{
var bone,btwo,bthree,shotCol;
bone = document.getElementById("cols1").offsetHeight;
btwo = document.getElementById("cols2").offsetHeight;
bthree = document.getElementById("cols3").offsetHeight;
var div = document.createElement("div");
div.className = "img_box";
div.innerHTML = '<img src="images/'+Math.ceil(Math.random()*7)+'.jpg" width="300px" />';
if(bone - btwo <= 0 && bone - bthree <= 0)
{
shotCol = "cols1";
}
else if(btwo - bone <= 0 && btwo - bthree <= 0)
{
shotCol = "cols2";
}
else if(bthree - bone <= 0 && bthree - btwo <= 0)
{
shotCol = "cols3";
}
document.getElementById(shotCol).appendChild(div);
myTimeOutI++;
if(myTimeOutI<10)
{
setTimeout(addElement,50);
}
if(myTimeOutI>=10)
{
window.onscroll = showPinterest;
}
}
addElement();
之前本人提供的方法的确是错误的,是因为后面测试时候加载图片没加上Math.random清除缓存。研究下后纠正下LZ的总结:
chrome没效果是因为for循环太快,你图片没加载完时候你的循环就可能已经结束了,所以肯定获取不到正确的高度。
但在ie下面你在把img加入dom后浏览器根据你的width自动默认先给你分配一个height(比如width=300时,分配height=321,width=600则height=643),所以你下次循环能取到一个height。fiefox没测,估计也是这样的。根据这个结论2#的方法延迟500ms也并不能保证正确,因为图片加载时间很可能超过500ms,LZ你可以在chrome实验下图片加载时间比较长的情况。
,进一步看,应该先写个预先加载random函数。
var IEnum = checkIeVersion()
if( IEnum && IEnum <=8 )
{
//IE8一下用这个方法,包括IE8 这里因为IE8一下貌似对js的image对象支持有问题,导致加载出错
var myTimeOutI=0;
function addElement()
{
var bone,btwo,bthree,shotCol;
bone = document.getElementById("cols1").offsetHeight;
btwo = document.getElementById("cols2").offsetHeight;
bthree = document.getElementById("cols3").offsetHeight;
var div = document.createElement("div");
div.className = "img_box";
div.innerHTML = '<img src="http://www.sishoo.test/tmp/'+Math.ceil(Math.random()*2)+'.jpg" width="300px" />';
if(bone - btwo <= 0 && bone - bthree <= 0)
{
shotCol = "cols1";
}
else if(btwo - bone <= 0 && btwo - bthree <= 0)
{
shotCol = "cols2";
}
else if(bthree - bone <= 0 && bthree - btwo <= 0)
{
shotCol = "cols3";
}
document.getElementById(shotCol).appendChild(div);
myTimeOutI++;
if(myTimeOutI<2)
{
setTimeout(addElement,50);
}
if(myTimeOutI>=2)
{
window.onscroll = showPinterest;
}
}
addElement();
}
else
{
//IE9以上或者FF chrome浏览器用这个方法
var myTimeOutI=0,img;
function appendImg()
{
img = new Image();
img.src = 'http://www.sishoo.test/tmp/'+Math.ceil(Math.random()*2)+'.jpg';
img.style.width="300px";
img.style.height="auto";
img.onload = addElement;
}
function addElement()
{
var bone = document.getElementById("cols1").offsetHeight, btwo = document.getElementById("cols2").offsetHeight, bthree = document.getElementById("cols3").offsetHeight, colList = {}, _min = Math.min.apply(null,[bone,btwo,bthree]);
colList[bone] = "cols1";
colList[btwo] = "cols2";
colList[bthree] = "cols3";
var div = document.createElement("div");
div.className = "img_box";
div.appendChild(img);
var shotCol = colList[_min];
document.getElementById(shotCol).appendChild(div);
myTimeOutI++;
document.title += myTimeOutI;
if(myTimeOutI<2)
{
appendImg();
}
if(myTimeOutI>=2)
{
window.onscroll = showPinterest;
}
}
appendImg();
}这个是我写的IE版本检测函数:
//检测IE的版本并返回版本数字比如9/8/7,非IE返回false
function checkIeVersion()
{
if(window.ActiveXObject)
{
var vName = navigator.appVersion,vNum = parseInt(vName.split(';')[1].replace(/[a-z]+|[A-Z]+|\s+/ig,""));
return vNum;
}
else
{
return false;
}
}那么,图片加载兼容性问题解决了,遗留的一个小问题就是貌似IE8及以下对 var img = new Image()支持有问题,所以在代码里我才加了IE版本号判断。这个问题不知道有哪位亲遇到过么? 一会我继续写这次的问题总结。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>瀑布流测试</title>
<script>window.onscroll = showPinterest;function showPinterest()
{
if(reachBottom())
{
var waitingBox = document.getElementById("waitingBox");
waitingBox.innerHTML = '<img src="images/loading.gif" />';
//setTimeout用来模仿后台取数据
window.onscroll = "";
setTimeout(function(){
document.getElementById("waitingBox").innerHTML = "";
var IEnum = checkIeVersion()
var forNum = 8;
if( IEnum && IEnum <=8 )
{
//IE8一下用这个方法,包括IE8 这里因为IE8一下貌似对js的image对象支持有问题,导致加载出错
var myTimeOutI=0;
function addElement()
{
var bone = document.getElementById("cols1").offsetHeight, btwo = document.getElementById("cols2").offsetHeight, bthree = document.getElementById("cols3").offsetHeight, colList = {}, _min = Math.min.apply(null,[bone,btwo,bthree]);
colList[bone] = "cols1";
colList[btwo] = "cols2";
colList[bthree] = "cols3";
var div = document.createElement("div");
div.className = "img_box";
var shotCol = colList[_min];
div.innerHTML = '<img src="images/'+Math.ceil(Math.random()*7)+'.jpg" width="300px" style="height:auto;" />';
document.getElementById(shotCol).appendChild(div);
myTimeOutI++;
if(myTimeOutI<forNum)
{
setTimeout(addElement,50);
}
if(myTimeOutI>=forNum)
{
window.onscroll = showPinterest;
}
}
addElement();
}
else
{
//IE9以上或者FF chrome浏览器用这个方法
var myTimeOutI=0,img;
function appendImg()
{
img = new Image();
img.src = 'images/'+Math.ceil(Math.random()*7)+'.jpg';
img.style.width="300px";
img.style.height="auto";
img.onload = addElement;
}
function addElement()
{
var bone = document.getElementById("cols1").offsetHeight, btwo = document.getElementById("cols2").offsetHeight, bthree = document.getElementById("cols3").offsetHeight, colList = {}, _min = Math.min.apply(null,[bone,btwo,bthree]);
colList[bone] = "cols1";
colList[btwo] = "cols2";
colList[bthree] = "cols3";
var div = document.createElement("div");
div.className = "img_box";
div.appendChild(img);
var shotCol = colList[_min];
document.getElementById(shotCol).appendChild(div);
myTimeOutI++;
document.title += myTimeOutI;
if(myTimeOutI<forNum)
{
appendImg();
}
if(myTimeOutI>=forNum)
{
window.onscroll = showPinterest;
}
}
appendImg();
}
},1000);
}
}
//检测IE的版本并返回版本数字比如9/8/7,非IE返回false
function checkIeVersion()
{
if(window.ActiveXObject)
{
var vName = navigator.appVersion,vNum = parseInt(vName.split(';')[1].replace(/[a-z]+|[A-Z]+|\s+/ig,""));
return vNum;
}
else
{
return false;
}
}
//检测是否到达浏览器底部,是返回true,否返回false
function reachBottom()
{
var isBottom,sHeight,sTop,cHeight;
if(document.compatMode == "BackCompat")
{
//document.compatMode == "BackCompat" IE标准兼容模式关闭
sHeight = document.body.scrollHeight;
sTop = document.body.scrollTop;
cHeight = document.body.clientHeight;
}
else
{
//document.compateMode == "CSS1Compat" IE标准兼容模式开启,此时IE同FF,和chrome稍有不同
sHeight = document.documentElement.scrollHeight;
sTop = document.documentElement.scrollTop==0? document.body.scrollTop: document.documentElement.scrollTop;
cHeight = document.documentElement.clientHeight;
}
isBottom = sHeight - sTop - cHeight;
if(isBottom == 0)
{
return true;
}
else
{
return false;
}
}
</script>
<style>
.cols_left{width:300px;margin-right:30px;height:auto;overflow:auto;float:left;}
.cols_right{width:300px;height:auto;overflow:auto;float:left;}
.img_box{width:300px;height:auto;overflow:hidden;margin-bottom:15px;box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);}
</style>
</head><body>
<div style="width:960px;margin-left:auto;margin-right:auto;height:auto;overflow:auto;">
<div id="cols1" class="cols_left">
<div class="img_box"><img src="images/1.jpg" width="300px" /></div>
<div class="img_box"><img src="images/2.jpg" width="300px" /></div>
<div class="img_box"><img src="images/7.jpg" width="300px" /></div>
</div>
<div id="cols2" class="cols_left">
<div class="img_box"><img src="images/4.jpg" width="300px" /></div>
<div class="img_box"><img src="images/6.jpg" width="300px" /></div>
<div class="img_box"><img src="images/1.jpg" width="300px" /></div>
</div>
<div id="cols3" class="cols_right">
<div class="img_box"><img src="images/3.jpg" width="300px" /></div>
<div class="img_box"><img src="images/5.jpg" width="300px" /></div>
<div class="img_box"><img src="images/2.jpg" width="300px" /></div>
</div>
</div>
<div id="waitingBox" style="margin-left:auto;margin-right:auto;"></div>
</body>
</html>
感谢 showbo 、whatisma 、danica7773 、crying_boy 、MengYouXuanLv 、u011461314 等各位亲
var myTimeOutI=0,img,forNum=8;
function appendImg()
{
img = new Image();
img.src = 'images/'+Math.ceil(Math.random()*7)+'.jpg';
img.style.width="300px";
img.style.height="auto";
img.onload = addElement;
}
function addElement()
{
var bone = document.getElementById("cols1").offsetHeight, btwo = document.getElementById("cols2").offsetHeight, bthree = document.getElementById("cols3").offsetHeight, colList = {}, _min = Math.min.apply(null,[bone,btwo,bthree]);
colList[bone] = "cols1";
colList[btwo] = "cols2";
colList[bthree] = "cols3";
var div = document.createElement("div");
div.className = "img_box";
div.appendChild(img);
var shotCol = colList[_min];
document.getElementById(shotCol).appendChild(div);
myTimeOutI++;
document.title += myTimeOutI;
if(myTimeOutI<forNum)
{
appendImg();
}
if(myTimeOutI>=forNum)
{
window.onscroll = showPinterest;
}
}
appendImg();
恩恩,但是如果是从数据库动态加载数据,并一条一条展示出来的话,在图片米有加载完成前是拿不到图片的高度数据的,所以只能等待img的onload之后才继续执行了。
恩 你说的有道理,不过图片高度预存储到数据库的话就麻烦很多了,生成的图片都得记录高度,这个对于原来系统来说可是个不小的小改变,图片预加载技术我不是很了解,现在就去学习嘿嘿,谢谢你的提醒。 @crying_boy
恩 你说的有道理,不过图片高度预存储到数据库的话就麻烦很多了,生成的图片都得记录高度,这个对于原来系统来说可是个不小的小改变,图片预加载技术我不是很了解,现在就去学习嘿嘿,谢谢你的提醒。 @crying_boy
你要想弄个实用点的建议你还是库里保存图片宽高或者继续完善加入异常处理,不管你settimeout还是onload都不可靠。
网络环境中出现某一张图片加载很慢或者完全加载不成功的情况都很正常,要是出现这情况你这样代码还影响下面一张图片的加载,更严重的要是第一张图片加载失败那整个功能全都失败了。