隐藏的<div>中的动画背景图像不会加载或加载非动画</div>

时间:2010-04-06 18:20:43

标签: javascript html google-chrome progress-bar

我花了一整天时间尝试制作一个“提交”隐藏表单的脚本,并用动画进度条隐藏显示。问题是Internet Explorer不会在隐藏的div中显示动画gif图像。图像是静态的。我访问了很多网站,发现了一个使用以下内容的脚本:

document.getElementById(id).style.backgroundImage ='url(/images/load.gif)';

最后,我的脚本可以在Internet Explorer,Firefox,Opera中运行但是...... Google Chrome根本不显示图像。我只看到div文本。经过多次测试后,我发现了以下内容:在Google Chrome浏览器中查看背景图片的唯一方法是在页面中的某个位置(隐藏div之外)包含1px维度的相同图像:

<img src="/images/load.gif" width="1" heigh="1" /> 

这就是诀窍但是......在这个肮脏的解决方案之后,Microsoft Explorer出于某种原因再次将图像显示为静态。所以,我的问题是:有什么方法可以强制Gogle Chrome显示图片吗?谢谢。这是我的剧本:

<script language="JavaScript" type="text/javascript">

function ver (id, elementId){
if (document.getElementById('espera').style.visibility == "visible") {
    return false;
}else{
var esplit = document.forms[0]['userfile'].value.split(".");
ext = esplit[esplit.length-1];
    if (document.forms[0]['userfile'].value == '') {
        alert('Please select a file');
        return false;
    }else{
        if ((ext.toLowerCase() == 'jpg')) {
            document.getElementById(id).style.position = 'absolute';
            document.getElementById(id).style.display = 'inline';
            document.getElementById(id).style.visibility = "visible";
            document.getElementById(id).style.backgroundImage = 'url(/images/load.gif)';
            document.getElementById(id).style.height = "100px";
            document.getElementById(id).style.backgroundColor = '#f3f3f3';
            document.getElementById(id).style.backgroundRepeat = "no-repeat";
            document.getElementById(id).style.backgroundPosition = "50% 50%";

        var element;
            if (document.all)
                element = document.all[elementId];
            else if (document.getElementById)
                element = document.getElementById(elementId);
            if (element && element.style)
                element.style.display = 'none'; 

            return true;
        }else{
            alert('This is not a jpg file');    
            return false;
        }
    }
}
}  
</script>


<div id="frmDiv">
<form  enctype="multipart/form-data" action="/upload.php" method="post" name="upload3" onsubmit="return ver('espera','frmDiv');">
<input type="hidden" name="max_file_size" value="4194304" />
<table border="0" cellspacing="1" cellpadding="2" width="100%">
<tr bgcolor="#f5f5f5">
<td>File (jpg)</td>
<td>
<input type="file" name="userfile" class="upf" /></td></tr>
<tr bgcolor="#f5f5f5">
<td>&nbsp;</td>
<td>
<input class="upf2" type="submit" name="add" value="Upload" />
</td></tr></table></form>
</div>


<div id="espera" style="display:none;text-align:center;float:left;width:753px;">&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />
&nbsp;<br />Please wait...<br />&nbsp;
</div>

1 个答案:

答案 0 :(得分:8)

尝试:

(new Image).src="/images/load.gif";

大G本身使用这种技术在其主页上预加载DNS查找。


<强>更新 由于令人难以置信的-1,我收到了......我需要解释为什么上述内容可能对那些在不了解给定解决方案的可能性的情况下进行下调的numbskull有效。

Google Chrome可能会“智能地”选择要下载哪些资源,通过分析它们是否实际显示在页面上(类似于浏览器不下载每个背景图片的方式:url( image )在CSS文件中)。如果这是真的,则以下情况也可能是真的: 如果要显示“load.gif”图像的时间比图像下载所用的时间少,那么它将显示为根本不显示图像(即使它刚刚被下载)。

使用'(新图像)预先加载图像.src =“image.gif”;'我们确保图像在浏览器的缓存中就绪,并在需要时立即可用。

至于为什么Internet Exploder只显示一帧,我不确定。页面中必须有其他变量导致此行为(长时间运行的脚本,限制GIF本身编码的循环次数,?)。