0

次のコードを取得しました。

window.setInterval(function(){
    var id = $('.slidermenu.currentone').attr('data-id');
    var newid = parseInt(id) + 1;
    //alert(newid + ' - ' + id);

    $('.slidermenu.currentone').animate({backgroundColor: 'white'}, 'slow');
    $('.slidermenu.currentone').removeClass("currentone");
    $('slidermenu[date-id='+newid+']').animate({backgroundColor: '#f3f3f3'}, 'slow');
    $('slidermenu[date-id='+newid+']').addClass("currentone");
    $('#activeimage img.currentone').fadeOut('slow');
    $('#activeimage img.currentone').removeClass("currentone");
    $('#activeimage img[data-id='+newid+']').fadeIn('slow');
    $('#activeimage img[data-id='+newid+']').addClass("currentone");
}, 3000);

3 秒ごとに実行される関数を作成し、スライダーに次の画像を表示させようとしています。まあ、最初に実行するときはかなりうまくいきます。しかし、2回目はうまくいきません。

var newid問題は、 from id、 plusの数を持たせることにあると思います1

また、実際にはこれを 5 番まで行い、その後再び 1 番まで下げる必要があります。

4

3 に答える 3

2

が欠けているようです。新しいスライダー メニューを現在のスライダー メニューに設定するときのセレクター。これを試して:

$('.slidermenu[date-id='+newid+']').animate({backgroundColor: '#f3f3f3'}, 'slow');
$('.slidermenu[date-id='+newid+']').addClass("currentone");
于 2013-01-13T17:01:58.810 に答える
0

問題は、interval関数が実行されるたびに、の値に1が加算されることですがdata-id、これは変更されません。5つの値をループする必要があるため、次のコードでクロージャを使用して、interval関数の外部で増分を別の値に格納する必要があります。

window.setInterval(function() {
  var inc = 0;
  return function() {
    inc = 1 + inc % 5;
    var id = $('.slidermenu.currentone').attr('data-id');
    var newid = parseInt(id) + inc;
    alert(inc);
    // slider code
  }
}(), 3000);
于 2013-01-13T17:59:50.087 に答える
0

idをインクリメントするには、increment関数の外部でid変数を作成し、interval関数が呼び出されるたびにそれをインクリメントする必要があります。クロージャから利用できるようにし、グローバルにしないようにすることができます。これは通常は推奨されます。

// make an anonymous function which reads the id attr and stores it in the id var.
var intervalFunction = (function(){
var id = $('.slidermenu.currentone').attr('data-id')
  , id = parseInt(id);

// return a function which will be run after every 3s and will increment the id
return function(){
  console.log(id++);
  // your slider code here
}})();

window.setInterval(intervalFunction, 1000);
于 2013-01-13T17:09:43.880 に答える