Javascript在替换为另一个img时显示旧img
我试图使用javascript将一个图像替换为另一个图像,但当我在chrome中调试它时,我会看到旧图像,直到我的“onload”foo结束,并且该图像实际上只有在退出时才会更改。我做错了什么 以下是代码(完整版本和): html:Javascript在替换为另一个img时显示旧img,javascript,html,Javascript,Html,我试图使用javascript将一个图像替换为另一个图像,但当我在chrome中调试它时,我会看到旧图像,直到我的“onload”foo结束,并且该图像实际上只有在退出时才会更改。我做错了什么 以下是代码(完整版本和): html: 所以,问题是,当调用changeImage()时,我首先看到旧图片,在changeImage()完成后,它会变成新图片。“请帮助”只有在使用调试器中断时才会发生这种情况?为什么会出现这样的问题?在loadAnotherPicture()中,您没有指定url值。不,它
所以,问题是,当调用changeImage()时,我首先看到旧图片,在changeImage()完成后,它会变成新图片。“请帮助”只有在使用调试器中断时才会发生这种情况?为什么会出现这样的问题?在loadAnotherPicture()中,您没有指定url值。不,它总是闪烁(首先显示旧的img),但在调试器中,我可以看到为什么先前指定了.url,img加载得很好。问题是,旧的img会变为可见,只有在变为新的img之后,它才会变为可见。我发现Image.onload无法按预期工作。它是在图像还没有实际加载时调用的(.complete为false)只是想知道,它应该是这样吗?
<body>
<input type=submit value="Load another pic" onclick="loadAnotherPicture();">
<div id="outer">
<div id="divtop">
<img id="imgtop" class="main" src="/pics/dom/dom1.png">
</div>
<div id="divbottom">
<img id="imgbottom" class="main" src="/pics/dom/dom2.png">
</div>
</div>
var url="http://dom.etogo.net/getdbimg";
var imgSrc="";
var visibleTop=0;
var visibleBottom=1;
var nowVisible=visibleTop;
var topOpacity=100, bottomOpacity=0;
var divTop, divBottom, imgTop, imgBottom;
divTop=document.getElementById("divtop");
imgTop=document.getElementById("imgtop");
divBottom=document.getElementById("divbottom");
imgBottom=document.getElementById("imgbottom");
divTop.style.opacity=topOpacity/100;
divBottom.style.opacity=bottomOpacity/100;
var changeInProgress=0;
function changeImage()
{
if(!changeInProgress)
{ return;
}
if(nowVisible==visibleTop)
{ //change bottom img
topOpacity=0;
bottomOpacity=100;
divBottom.style.opacity=bottomOpacity/100;
divTop.style.opacity=topOpacity/100;
nowVisible=visibleBottom;
}
else
{ //change top img
topOpacity=100;
bottomOpacity=0;
divTop.style.opacity=topOpacity/100;
divBottom.style.opacity=bottomOpacity/100;
nowVisible=visibleTop;
}
changeInProgress=0;
}
function loadAnotherPicture()
{
if(changeInProgress ==0)
{ var xmlHttp=new XMLHttpRequest();
xmlHttp.onreadystatechange=function()
{ if(xmlHttp.readyState==4 && xmlHttp.status==200)
{ var xml=xmlHttp.responseXML;
var imagesXML=xml.documentElement.getElementsByTagName("image");
if(imagesXML==null) return;
imgSrc=imagesXML[0].getElementsByTagName("url")[0].firstChild.nodeValue.trim();
changeInProgress=1;
if(nowVisible==visibleTop)
{ //change bottom img
imgBottom.src=imgSrc;
imgBottom.onload=changeImage();
}
else
{ //change top img
imgTop.src=imgSrc;
imgTop.onload=changeImage();
}
}
}
xmlHttp.open("GET", url);
xmlHttp.send();
}
}