0

ここでコードの何が問題なのかわかりません。変数をグローバルに設定しましたが、ここではクリア タイムアウトがまだ機能していません。

ありがとう、ケルヴィン

var myslide = null;
$(document).ready(function () {
    var current = null;

    $('ul#panel li a').click(function () {
        stopAuto();
        $('ul#panel li a').removeClass('active');
        $(this).addClass('active');
        current = $(this).attr('href');
        $('#wrapperSlide').clearQueue();
        $('#wrapperSlide').scrollTo($(current), 800);
        return false;
    });

    if (current==null)
    { 
        $("ul#panel li").each(function(i){
        var counter1 = i+1;
        var timer1 = counter1 * 5000;
        myslide = setTimeout(function(){
        setLoop1(counter1);
        },timer1);
    });
    } else {
        $('#wrapperSlide').clearQueue();
        return false;
    }
});

これらは、スライド画像をループして自動停止するための関数です

  function setLoop1(counter)
{     
      var counter4 = counter;
      var myID = $('a#'+counter4).attr('href');
      $('ul#panel li a').removeClass('active');
      $('a#'+counter4).addClass('active');
      $('#wrapperSlide').scrollTo($(myID), 800);
}

//function to stop the auto slide

function stopAuto() {

    clearTimeout(myslide);
}
4

2 に答える 2

2

個別の<li>要素ごとにこれらの 2 つのタイマーを開始しています。

    $("ul#panel li").each(function (i) {
        var counter1 = i + 1;
        var myID = $('a#' + counter1).attr('href');
        setLoop1(counter1, myID);
    });

ただし、そのsetLoop1()関数は同じ 2 つの変数を使用します。各タイマーは他とは異なり、からの戻り値setTimeout()は呼び出すたびに異なる値になります。1 つの単純な変数に多数の異なる数値を格納することはできません。

あなたがすべきことは、タイマーを各<li>要素のjQuery「データ」プロパティに保存することです。次に、「クリック」ハンドラーはそれからタイムアウトをキャンセルできます。または、リスト項目ごとに別個のタイマー関数のペアが必要ない場合もあります。

于 2012-10-11T04:56:55.863 に答える
0

私が見るように、2 つのケースが考えられます。stopAuto()関数が呼び出されていないか、呼び出されている場合、stopAuto()関数は呼び出されたときに未定義です。したがって、呼び出される前にstopAuto()関数を定義し、デバッガ ツールを使用してコンソールを表示することをお勧めします。

于 2012-10-11T04:53:43.193 に答える