【问题标题】:Animated background image in a hidden <div> doesn't load or loads not animated隐藏 <div> 中的动画背景图像未加载或加载未动画
【发布时间】:2010-04-06 18:20:42
【问题描述】:

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

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

最后,我的脚本可以在 Internet Explorer、Firefox、Opera 中运行,但是……谷歌浏览器根本不显示图像。我只看到 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>

【问题讨论】:

  • 是时候终于可以让IE6休息了。 IE7+ 上也会出现这种情况吗?
  • 保罗,它是 IE7。我已经阅读了这个长线程:west-wind.com/Weblog/posts/1227.aspx,看起来这个问题没有解决方案。

标签: javascript html google-chrome progress-bar


【解决方案1】:

试试:

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

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


更新 由于我收到的 -1 令人难以置信......我需要解释为什么上述内容可能适用于当他们不了解给定解决方案的可能性时投反对票的麻木。

谷歌浏览器很可能通过分析它们是否会实际显示在页面上来“智能地”选择要下载的资源(类似于浏览器不会下载每个 background-image:url(image em>) 在 CSS 文件中)。如果这是真的,那么以下情况也可能是真的: 如果打算显示“load.gif”图像的时间少于下载图像所需的时间,那么它看起来就像根本不显示图像(即使它只是被下载)。

通过使用 '(new Image).src ="image.gif";' 预加载图像方法我们确保图像将在浏览器的缓存中准备好,因此在需要时立即可用。

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

【讨论】:

  • -1 请阅读问题。他没有预载问题。该图像根本没有在 Chrome 中显示。
  • 尽快在您的页面上运行此程序以开始加载图像(到屏幕外缓冲区和浏览器的缓存中)。
  • 谢谢大卫·默多克。不幸的是,这并不能解决问题 - 在 Google Chrome 中显示图像,但在 Internet Explorer 中使图像静态:(
  • 刚刚发现如果我包含 (new Image).src="/images/load.gif"; 在所有浏览器中一切正常在用户提交表单之前访问的不同页面中。如果没有其他解决方案,我会将其包含在登录页面中。不是最好的解决方案,但它确实有效。
  • @Guanche。您的脚本中存在许多性能问题。你应该考虑重构。也不需要 'language="JavaScript"'。哦,如果你想 +1 我那就太好了! :-)
猜你喜欢
  • 2016-03-31
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 2011-11-10
  • 1970-01-01
  • 2014-02-17
  • 1970-01-01
相关资源
最近更新 更多