0

スライドショーとして機能する一連のページがあり、録音されたナレーションがテキストを読み取るときに、さまざまな要素が表示されるようにタイミングが調整されています。

load()を使用して次の「スライド」で領域を更新すると、問題が発生します。setTimeoutを使用して表示を制御しています。私の問題は、2番目のページが最初のページにあるsetTimeoutタイミングを使用していることです。clearTimeoutが必要ですか?

ページ1スクリプト:

var actions = [
  { time : 4, action : function() { $('#slidePhoto').animate({width: $('#slidePhoto img').width() / 1.5}, 2000 ).addClass('side-photo') } },
  { time : 8, action : function() { $('#slideEl2').fadeIn('slow') } },
  { time : 17, action : function() { $('#slideEl3').fadeIn('slow') } },
  { time : 24, action : function() { $('#slide-container').hide('slide', { direction: "left"}, 1000, function () {
      $('#slide-container').load('introduction2.php', function() {
        $('#slide-container').fadeIn('slow');
      });
    } ) } }
];
$(document).ready(function() {
  for( var i in actions ) {
    setTimeout( actions[i].action, actions[i].time * 1000 );
  }
});

2ページ目のスクリプト:

var actions = [
  { time : 10, action : function() { $('#slidePhoto').animate({width: $('#slidePhoto img').width() / 1.5}, 2000 ).addClass('side-photo') } },
  { time : 16, action : function() { $('#slideEl2').fadeIn('slow') } },
  { time : 29, action : function() { $('#slideEl3').fadeIn('slow') } },
  { time : 40, action : function() { $('#slide-container').hide('slide', { direction: "left"}, 1000, function () {
      $('#slide-container').load('introduction3.php', function() {
        $('#slide-container').fadeIn('slow');
      });
    } ) } }
];
$(document).ready(function() {
  for( var i in actions ) {
    setTimeout( actions[i].action, actions[i].time * 1000 );
  }
});

ページは、メインコンテナページの領域内にロードされます。ページごとに異なるIDを使用することでこれを回避できると思いますが、もっと簡単な方法があると思います。

4

1 に答える 1

1

clearTimeout 関数の引数として使用されるタイマー ID を登録する必要があります。

たとえば、タイムアウトを作成する場合:

for( var i=0; i<actions.length; i++ ) {
    actions[i].timeout = setTimeout( actions[i].action, actions[i].time * 1000 );
}

そして、それらをクリアするには:

for( var i=0; i<actions.length; i++ ) {
    clearTimeout(actions[i].timeout);
}

(「for var i in」をアクションの長さの標準的な反復に置き換えました。これは配列のベストプラクティスです)

于 2012-05-01T07:04:32.333 に答える