-1

while ループで JavaScript アニメーションをずっと実行しようとしてきましたが、アニメーションの影響を受けるのは配列の最後の行だけです。アニメーションに含まれる行が非常に多いため、while ループの後にすべての変数を保存すると、手動で保存すると 20 000 行ほどになります。

ヒントや何かがあれば、これをできるだけうまく解決する方法が素晴らしいでしょう! ありがとう

EDIT- コード //非常に単純な例

<?php

while($rows = mysql_fetch_array($data)){

$data = $rows['data'];

?>
<div id="square" style="height:50px; width:50px; background:yellow;" </div>
<script>

var data = '<?php echo $data; ?>';

setTimeout("call()",100);
function call() {

        if(data == "hello"){ //bad example 
        $('#square').animate({ left: (600), top: (200) }, 2000);                
        }
        else if(data == "bye"){
        $('#square').animate({ left: (100), top: (100) }, 2000);                
        }
        //etc... 
}
</script>

<?php
}
?>

このようなもの:)この例では、配列内の行数で正方形を出力します。したがって、基本的にはすべての正方形をアニメーション化したいと考えています。

4

1 に答える 1

0

PHPループが の複数のコピーを生成しています が、それらはすべて同じidを持っています。IDは一意であることを意図しているため、同じIDを複数回使用すると、ID によって参照される要素の 1 つしか見つからないなど、予期しない動作が発生する可能性があります。while<div> id="square"

複数回使用されるIDに最も類似した属性は、 class属性です。

さらに、複数回名前が付けられ<script>関数で を生成しています。callのコードが実行されるたびに<script>、古いcall 関数が新しい関数によって上書きされます。これは、最新のものだけがメモリに存在することを意味します。

JavaScriptPHPから分離し、同じidを複数回使用しないようにしてください。これにより、コードの有効性が向上し、問題が解決するはずです。

最後に、 Stringをに渡すと のsetTimeoutように動作しますがeval、この動作は推奨されません。代わりに関数を直接渡してください。

于 2013-10-21T12:36:39.647 に答える