IE7 / IE8および凍結アニメーションGIF
-
05-07-2019 - |
質問
これは古い問題だと確信しています。
これは、アニメーション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がフリーズして表示され、アニメーションはありません
最も重要なことは、他のページではすべてが魅力のように機能することです。
P.s。 IEについて怒らないでください... argh ...
編集:
スパンでラップアラウンド:
<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();
}
そして神秘的に-今すぐ動作します。
解決
これに一度遭遇しました。 JavaScriptを使用して、ブラウザが読み込みに少し時間がかかるページに移動したときに少し読み込みの速いものを表示しようとした場合、IEはGIFをアニメーション化しません。隠れた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の可視性を切り替えます(これは古いバージョンのPrototypeライブラリを使用していますが、アイデアは得られます):
<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()関数全体の呼び出しを遅らせます。がんばって!
他のヒント
Spin.js はこのユースケースで機能します。
受け入れられた答えは理解または実装するのが少し複雑であることがわかりましたが、これを行っているときに同じ問題がありました、
次の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>