15

我很确定这是一个老问题。

这就是我渲染动画 gif 的方式:

 <img id='loading' alt='loading' style="display: none; position:  
    relative; left:10px; top:2px;" src="<%= Url.Image("loading.gif") %>" />

这就是我现在拼命想要展示的方式:

showLoading: function(gifId, butId) {
        var n = gifId != undefined ? gifId : 'loading';
        var l = $('#' + n);

        //if browser is stupid
        if ('v' == '\v') {
            var s = l.attr('src');
            var x = document.getElementById(n);
            x.style.visibility = "visible";
            x.style.display = "inline";
            setTimeout("document.getElementById('" + n + "').src = '"+s+"';",  
                        100);
        } else {
            l.show();
        }
        if (butId != undefined)
            $('#' + butId).css('cursor', 'default').attr("disabled", true);
    },

问题: 动画 gif 出现冻结,没有动画

最奇怪的是,在其他页面上,一切都像魅力一样。

Ps 不吐槽 IE 很痛苦……啊……

编辑:

用跨度包裹:

  <span id='loading' style='display: none;
                position: relative; left: 0px; top: 2px;'>
                <img alt='loading' src="<%= Url.Image("loading.gif") %>" />
            </span>

将js更改为:

 if ('v' == '\v') {
            var f = function() {
                l.show();
                l.attr('src', l.attr('src'));
            };
            setTimeout(f, 100);
        } else {
            l.show();
        }

神秘地——它现在可以工作了。

4

3 回答 3

9

我遇到过一次。如果我尝试使用 JavaScript 在浏览器移动到需要一段时间才能加载的页面时显示一点加载抖动,IE 不会为 GIF 设置动画。我通过将加载 throbber 直接放入隐藏 div 中的 HTML(不是通过 JavaScript 插入)来解决它:

<div id="pseudo-progress-area" style="display: none;">
    <h3>Please wait while we process your PayPal transaction...</h3>
    <p style="text-align: center;">
        <img src="/Media/Template/Images/LoadingProgressBar.gif" alt="" />
    </p>
</div>

然后使用 JavaScript 在短暂延迟后切换 div 的可见性(这是使用旧版本的原型库,但你明白了):

<script type="text/javascript">    
    // We have to call this function via a setTimeout() or else IE7 won't
    // animate the GIF as the next page is loading.
    var fnHideConfirmation = function() {
        Element.hide( 'confirmation-area' );
        Element.show( 'pseudo-progress-area' );
    };    
</script>

该功能在表单的提交按钮中触发:

<input 
    type="submit"
    class="button"
    name="SubmitConfirmation"
    value="Buy Now →"
    onclick="setTimeout(fnHideConfirmation, 50);" />

因此,与其延迟 src 属性更改,不如将其搁置一旁,然后延迟对整个 showLoading() 函数的调用。祝你好运!

于 2009-11-26T13:24:34.070 回答
5

Spin.js适用于这个用例。

于 2011-08-22T17:58:15.650 回答
0

我发现接受的答案有点难以理解或实施,但是我在执行此操作时遇到了同样的问题,

我有以下 HTML

<div id="progress_wheel_div" align="center" style="height:100%; display:none; vertical-align: middle;">
    <img src="images/progress_wheel.gif" style="margin-top: 204px;"/>
    <p class='arbitText' style="font-weight: bold;">Processing, Please wait!</p>
</div>

在java脚本中我正在这样做

function onSubmit() {

   var divProgressWheel = document.getElementById("progress_wheel_div");
   divProgressWheel.style.display = "block";
}

但它不是动画 gif 文件,

解决方案

更新了我的 java 脚本并使其如下所示

function onSubmit() {    
   setTimeout(showProgress, 500);
}

function showProgress() {

    var divProgressWheel = document.getElementById("progress_wheel_div");

    divProgressWheel.innerHTML = "<img src='images/progress_wheel.gif' style='margin-top: 204px;'/><p class='arbitText' style='font-weight: bold;'>Processing, Please wait!</p>";
    divProgressWheel.style.display = "block";
}

请注意 divProgressWheel.innerHTML 与我在 html 中的相同。因此,我们可以删除不必要的 html,因此修改后的 html 将是;

<div id="progress_wheel_div" align="center" style="height:100%; display:none; vertical-align: middle;">

    </div>
于 2014-04-08T04:15:17.040 回答