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 秒运行一次的函数,然后让我的滑块显示下一张图像。好吧,它第一次运行时效果很好。但是第二次,它就是行不通。

我认为问题可能在于使var newid具有 fromid和 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

要递增 id,您需要在递增函数之外创建 id 变量,然后在每次调用间隔函数时递增它。您可以从闭包中使其可用,而不是全局使用,这通常是首选。

// 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 回答
0

问题是每次你的区间函数运行时,它都会给 的值加 1 data-id,这不会改变。由于您要遍历 5 个值,因此您需要将增量存储在间隔函数之外的单独值中 - 在以下代码中使用闭包:

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 回答