1

私はこのような非常に単純なJavaScriptアニメーションを持っています

$(function() {
$('#slider1').cycle();
$('#slider2').cycle();
});

次に、このスクリプトを次のように頭に呼び出します。

<script type="text/javascript" src="js/slider.js"></script>

次に、ID「slider1」および「slider2」を持つ div は、次のようにページに呼び出される php インクルード ファイルに含まれます。

<?php include('assets/col1.php'); ?>

インクルード ファイルのコードは次のようになります。

<div id="slider1">
<img src="images/image1.png" />
<img src="images/imgae2.png" />
<img src="images/image3.png" />
<img src="images/image4.png" />
</div>

IE8またはIE9に到達する場合を除いて、これは正常に機能します。JavaScript は約 75% の確率で動作するため、私は困惑しています。ページをロードしたり、ページに戻ったりすると、たまに JavaScript がアクティブにならず、すべての画像が 1 つの長い列にレンダリングされます (基本的に、js 関数がないとどのように見えるか)。

IE9 が PHP と JavaScript をロードする順序に問題があると思われますが、私は js と php の両方の初心者にすぎないため、これを修正する方法について非常に明確なヘルプがあれば本当に素晴らしいでしょう。前もって感謝します。

4

2 に答える 2

1

すっごく長い話...

PHP は解釈された HTML を返します。ファイルをインクルードするたびに、PHP はバッファーをフラッシュします。つまり、特定のコンテンツが他のコンテンツよりも先にブラウザーに返されます。これが発生している間、ページはまだ読み込み中の状態です。

このため、必ず を呼び出す必要があります$(document).ready(function(e){ ... });。これにより、javascript が実行される前に、コードがバッファーのフラッシュを完了してブラウザーにロードする機会が得られます。

于 2012-09-01T03:01:12.163 に答える
0

Dojo を使用しているときに同様の問題が発生しましたが、次のように解決しました: メインまたは親の div 表示スタイルを none に設定します。

<div id="g_body" style="display:none">

Dojo のロードが完了したら、dojo.ready 関数を使用して表示スタイルをブロックに変更します。

require(["dojo/ready", "dojo/parser", "dijit/registry"], function(ready, parser, registry){
  ready(function(){
    if(document.getElementById("g_body")!= null){
        document.getElementById("g_body").setAttribute("style","display:block");
    }
  });
});

その後、ページは Dojo エレメントが完全にロードされたときにのみ表示されます。

jQueryにも似たようなものがあると思いますが、よくわかりません。おそらく:

$(document).ready(function() {});

お役に立てれば。

于 2012-09-01T06:20:25.337 に答える