【【预加载图片显示重复问题,已赋多张截图和源码】】---【求大神解答】

XMYXM 2015-01-19 01:43:17
http://imgsrc.baidu.com/forum/w%3D580/sign=bfe4d94b8f5494ee87220f111df4e0e1/7f1d8826cffc1e17c6b8d4c54990f603728de977.jpg
http://imgsrc.baidu.com/forum/w%3D580/sign=bfe4d94b8f5494ee87220f111df4e0e1/7f1d8826cffc1e17c6b8d4c54990f603728de977.jpg
http://imgsrc.baidu.com/forum/w%3D580/sign=f9b5e19097eef01f4d1418cdd0ff99e0/be92c5fc1e178a82f43b2754f503738da877e877.jpg



源码如下
//创建图片元素
function loadImg(ImgList,FileName) {
for (var i = 0; i < ImgList.length; i++) {
if (ImgList[i] != null && ImgList[i] != "" && ImgList[i] != undefined) {
var imgsrc = "/" + window.domainlink + "/UploadFile/" + FileName + "/" + ImgList[i];
var img = new Image();
img.src = imgsrc;
if (img.complete == true) Imgcall(img);
else img.onload = function () { Imgcall.call(img) };
}
}
}
//图片预加载回调方法
function Imgcall() {
var imgsrc = this.src;
var width = this.width;
var height = this.height;
var img = document.createElement("img");
img.src = imgsrc;
img.setAttribute("class", "MycoImgload");
if (width != height && width > 0 && height > 0) {
if (width > height) {
height = 100 * height / width;
width = 100;
img.style.marginTop = (100 - height) / 2 + "px";
}
else {
width = 100 * width / height;
height = 100;
}
img.style.width = width + "px";
img.style.height = height + "px";
}
else {
img.style.width = "100px";
img.style.height = "100px";
}
var div = document.createElement("div");
div.setAttribute("class", "divimg")
div.appendChild(img);
dropbox.appendChild(div);
GetImgNameList($("#dropbox .divimg"));
}
...全文
132 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
XMYXM 2015-01-19
  • 打赏
  • 举报
回复
引用 6 楼 slwsss 的回复:
for 循环结束后img的值为ImgList[length-1] 之后每次执行onload 都是取这个值导致图片重复 加(function(img){})(img) 把img 放到局部域去img.onload 的取值是(function(img){ 这里的变量不再是外部的img
回答的真好
slwsss 2015-01-19
  • 打赏
  • 举报
回复
for 循环结束后img的值为ImgList[length-1] 之后每次执行onload 都是取这个值导致图片重复 加(function(img){})(img) 把img 放到局部域去img.onload 的取值是(function(img){ 这里的变量不再是外部的img
XMYXM 2015-01-19
  • 打赏
  • 举报
回复
引用 4 楼 slwsss 的回复:
(function(img){ if (img.complete == true) Imgcall(img); else img.onload = function () { Imgcall.call(img) }; })(img); 这样试下
我擦,果然大神啊,膜拜膜拜,这个代码你能解释一下原因和你这个写法么?? 修改之后的代码:function loadImg(ImgList,FileName) { for (var i = 0; i < ImgList.length; i++) { if (ImgList[i] != null && ImgList[i] != "" && ImgList[i] != undefined) { var imgsrc = "/" + window.domainlink + "/UploadFile/" + FileName + "/" + ImgList[i]; var img = new Image(); img.src = imgsrc; //if (img.complete == true) Imgcall(img); //else img.onload = function () { Imgcall.call(img) }; (function (img) { if (img.complete == true) Imgcall(img); else img.onload = function () { Imgcall.call(img) }; })(img); } } }
slwsss 2015-01-19
  • 打赏
  • 举报
回复
(function(img){ if (img.complete == true) Imgcall(img); else img.onload = function () { Imgcall.call(img) }; })(img); 这样试下
XMYXM 2015-01-19
  • 打赏
  • 举报
回复
没有人,,大家都还没睡醒
XMYXM 2015-01-19
  • 打赏
  • 举报
回复
图片csdn上传不上去,只能提供连接了,度娘把图片压缩得厉害,论坛大神不少求解答,我已经试过多种方案都不能解决这个问题,用闭包的方式可以用来解决这个问题吗(其实我闭包不熟)

87,907

社区成员

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

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