0

わかりました、私は本当に一日中これに取り組んでいて、私はそれを理解することができません.

setTimeout() を使用する JavaScript スライドショーがあります。Chrome と一部の FF バージョンでは、CPU の使用量を減らすために速度が低下し、スライドショーに戻ったときにスライドショーにあると思われる場所に追いつくために速度が上がることを理解しています。

ただし、これを行うと、速度が向上するだけでなく、コード内のいくつかの質問が無視されて、画像配列から飛び出し、短い未定義エラーが発生します。それが追いつくと、それはうまくいきますか?どうすればこれを回避できるのか、またスピードアップを止める方法はありますか?? これは私が使用しているコードです。

<script type="text/javascript">
<?php 
$fetch_images = mysql_query($Aquery);
$fetch_title = mysql_query($Bquery);
$fetch_text = mysql_query($Cquery);
$num_rows =  mysql_num_rows($fetch_images);
?>
var i=0;
var products  = [<?php while($image = mysql_fetch_array($fetch_images)){echo "'".$image['imageurl']."',";}?>];
var productstitle  = [<?php while($title = mysql_fetch_array($fetch_title)){echo "'".$title['title']."',";}?>];
var productstext  = [<?php while($text = mysql_fetch_array($fetch_text)){echo "'".stripslashes($text['strapline'])."',";}?>];
function slideShow<?php echo $timerTag;?>(){
    if (i<=(products.length-1)){
        $('#headerslideimage').fadeTo("slow", 0, function() {
        <?php if(page('pageurl') != 'home'){?>
            document.getElementById('headerslidetitle').innerHTML=productstitle[i];
            document.getElementById('headerslidetext').innerHTML=productstext[i];
        <?php }?>
        document.getElementById('headerslideright').innerHTML="<img id='headerslideimage' src='"+products[i]+"' alt='"+productstitle[i]+"'/>";
        i++;
        $('#headerslideimage').fadeTo(4000, 100, function() {});
    });
} else {
    i = 0;
    $('#headerslideimage').fadeTo("slow", 0, function() {
    <?php if(page('pageurl') != 'home'){?>
    document.getElementById('headerslidetitle').innerHTML=productstitle[i];
    document.getElementById('headerslidetext').innerHTML=productstext[i];
    <?php }?>
    document.getElementById('headerslideright').innerHTML="<img id='headerslideimage' src='"+products[i]+"' alt='"+productstitle[i]+"'/>";
    i++;
    $('#headerslideimage').fadeTo(4000, 100, function() {});
});
}
setTimeout("slideShow<?php echo $timerTag;?>()", 5000);
}
4

2 に答える 2

0

アニメーション関数の1つが最終的に呼び出していrequestAnimationFrameますか? setIntervalsetTimeoutタブを最小化または切り替えるときに実行を停止しないでくださいrequestAnimationFrame。その結果、インターバル(または連鎖タイムアウト)タスクから呼び出している場合は、タブが再びフォーカスされたときにすばやく再生できるように、requestAnimationFrame新しいタスクを継続的にキューに入れます。requestAnimationFrame

この関連する質問をチェックしてください:最小化のJquerysetInterval

于 2012-05-22T01:33:50.683 に答える
0

関数内でPageVisibilityAPIを使用して、ページが現在表示されているかどうかを確認します。その反復の実行をスキップしない場合。これには、ユーザーがページを操作していないときに使用するユーザーリソースが少なくなるという追加のボーナスがあります。

于 2012-05-22T01:46:34.953 に答える