Javascript预加载图像片段不';行不通

Javascript预加载图像片段不';行不通,javascript,image-preloader,Javascript,Image Preloader,我真的不知道我的这个预加载代码段有什么问题,加载包装器会像if语句一样消失也没关系。希望任何人都能发现问题: //html <script type='text/javascript'>$(document).ready(function(){preloadImages()});</script> //js function preloadImages() { var xmlDoc = loadXMLDoc("http://www.wdagdesign.com/ic

我真的不知道我的这个预加载代码段有什么问题,加载包装器会像if语句一样消失也没关系。希望任何人都能发现问题:

//html

<script type='text/javascript'>$(document).ready(function(){preloadImages()});</script>

//js

function preloadImages()
{
var xmlDoc = loadXMLDoc("http://www.wdagdesign.com/ice2/menu.xml");
var y = xmlDoc.getElementsByTagName("title");
var imgCount = y.length;


for(var i=0; i<imgCount;i++)
{
    var imgObj = new Image();
    var $pic = xmlDoc.getElementsByTagName("pic")[i].childNodes[0].nodeValue;

    imgObj.src = $pic;
    imgObj.onLoad = imagesLoaded($pic);
}
}


var $imageCount = 0;

function itemsLength()
{
var xmlDoc = loadXMLDoc("http://www.wdagdesign.com/ice2/menu.xml");
var y = xmlDoc.getElementsByTagName("title");

return y.length;
}




function imagesLoaded($pic)
{

$imageCount += 1;

if($imageCount != itemsLength())
{
    return;

}else{


    createMenu();
    var $loadingWrapper = document.getElementById('loadingWrapper');
    var $loading= document.getElementById('loading');
    TweenMax.to($loadingWrapper,0,{css:{display:'none'}});
    TweenMax.to($loading,0,{css:{display:'none'}});
    $imageCount = 0;


}

}



function loadXMLDoc(dname)
{
if (window.XMLHttpRequest)
{
    xhttp=new XMLHttpRequest();
}
else
{
    xhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xhttp.open("GET",dname,false);
xhttp.setRequestHeader("Cache-Control", "no-cache");
xhttp.setRequestHeader("Pragma", "no-cache");
xhttp.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
xhttp.send();
return xhttp.responseXML;
} 
//html
$(document).ready(函数(){preload图像()});
//js
函数preload images()
{
var xmlDoc=loadXMLDoc(“http://www.wdagdesign.com/ice2/menu.xml");
变量y=xmlDoc.getElementsByTagName(“标题”);
var imgCount=y.长度;
对于(var i=0;i

希望任何人都能帮我解决这个问题。您好。

我认为您的问题在于onLoad方法:

imgObj.onload = imagesLoaded($pic);
应该是:

imgObj.onload = function () {
    imagesLoaded($pic);
};

在第一种情况下,立即调用imagesLoaded函数。在我的示例中,该函数在加载图像时运行

,而不是推出自己的图像预加载程序(除非您想了解其工作原理),我会使用现有的解决方案,如

其行为应与您的代码相同:

添加此脚本标记:

<script src="https://raw.github.com/alexanderdickson/waitForImages/master/src/jquery.waitforimages.js"></script>

用我那缺乏经验的眼光来看这两个问题

你的html脚本中需要这个吗

$(document).ready(function(){preloadImages()});
如果要预加载,则需要立即加载,而不一定是在文档准备好之后

及以下:

TweenMax.to($loadingWrapper,0,{css:{display:'none'}});
TweenMax.to($loading,0,{css:{display:'none'}});

显示:“none”将隐藏输出,直到您将其更改为显示:“block”(或其他内容),但如果css参数是可选的,请尝试将其删除。

如果您已经在使用jQuery,为什么要手动构造XMLHttpRequest?似乎您复制/粘贴了一些代码片段到您的网站中。实际上我正在学习Javascript,我不习惯jQuery,我学会了这种方式来请求我的XML。@Blender。一点也不,我是为我的工作感到骄傲,伙计,我不是一个复制粘贴人。我很抱歉,我只是觉得那样。谢谢你的时间先生。我真的想完全控制这个“预渲染图像片段”(我必须从XML中构建3个不同的动态菜单,我想继续使用我的代码来控制正在发生的事情。如果所有操作都失败了,我将寻求你的建议。你好,伙计。@Diego:有什么需要控制的?实际上它是如何工作的?这对我来说非常重要,因为我可以处理错误,因为这年龄不是从身体加载的,也不是从乞丐身上构建的在主体完成加载其图像后出现,但这些图像不在主体中。我尝试过,结果相同,加载包装器消失,但没有加载图像。我非常感谢您的时间,希望您能看到另一种解决方法。您好,伙计。请记住,
脚本
元素的资源可能会在任何阶段挂起:)谢谢你的时间@Ibu。我把这个函数放到匿名函数中,但是现在加载包装卡卡在那里(我按照你的方式做)。然后我包装整个东西以便像这样运行:imgObj.onLoad=(function(){imagesLoaded($pic)})();但第一个问题确实发生了。希望您能看到其他解决方法。再次感谢您抽出时间。
TweenMax.to($loadingWrapper,0,{css:{display:'none'}});
TweenMax.to($loading,0,{css:{display:'none'}});