3

在我的网站中,我有一组/列表的 div,每个都包含一个图像。我想要做的是按顺序将一个类一个接一个地添加到每个 div 中。将类添加到每个 div 后,它就完成了。所以我不希望它循环。

这是一般的 HTML 设置:

<div class="row">
   <div class="image"></div>
   <div class="image"></div>
   <div class="image"></div>
</div>

因此,当 javascript 运行时,html 将如下所示:

<div class="row">
   <div class="image active"></div>
   <div class="image active"></div>
   <div class="image active"></div>
</div>

我目前在网站上使用 jQuery,因此首选使用 jQuery 的方法。

谢谢!

// 编辑

让我添加更多信息,以便我尝试完成的工作更有意义。我知道如何添加一个类,但是,我不想一次将 .active 类添加到每个 .image div 中,它需要一次发生一个,以便每个之间几乎有一点延迟.

如果有人需要更多说明,我可能会发布一个动画 .gif 或其他东西来更好地描述我想要的东西,但希望这会有所帮助!

再次感谢!

4

5 回答 5

4

获得延迟的一种方法是使用.each()回调的索引参数并将其乘以某个常量:

$(".row .image").each(function(i,el) {
    var $this = $(this);
    setTimeout(function() {
            $this.addClass('active');
        }, i*1000); // milliseconds
});

http://jsfiddle.net/mblase75/AvXMM/


第二种方法涉及创建一个查找第一个.active元素的递归函数:

function looper() {
    if ($('.row .image:not(".active")').first().addClass('active').length) {
        setTimeout(looper, 1000);
    };
};
looper();

http://jsfiddle.net/mblase75/qxEW7/


您也可以使用setInterval,但这种方法意味着第一个元素addClass将被延迟,而在上面的示例中,第一个元素会立即添加其类:

window.__interval = setInterval(function() {
    if (!$('.row .image:not(".active")').first().addClass('active').length) {
        clearInterval(window.__interval);
    };
},1000); // milliseconds

http://jsfiddle.net/mblase75/rgUJq/

于 2013-08-29T18:08:48.357 回答
2

你可以这样做..

$(".row > .image").addClass('active');

既然你修改了你的问题......如果你抓住所有的图像,那么你可以setInterval用来添加延迟。也许像这样的东西可能是你正在寻找的东西。这里的延迟是 500 毫秒,显然你可以将其更改为任何你想要的。

var images = $(".row > .image");
var count = 0, length = images.length;
var interval = setInterval(function(){
    if(count == length)
        clearInterval(interval);

    images.eq(count++).addClass('active');
}, 500)
于 2013-08-29T17:48:37.487 回答
0

您可以使用.each()循环遍历每个元素,然后使用.addClass()将类添加到循环中的该元素。

$(".row .image").each(function(index) {
  $(this).addClass("image_" + index);
});
于 2013-08-29T17:49:45.480 回答
0

你说“按顺序”,但不是循环?

这有点令人困惑,所以这里有两个选项:

如果你不想要一个循环,那么$(".row .image").addClass("active");

如果你想要它按顺序,那么$(".row .image").each($(this).addClass("active"));

于 2013-08-29T17:50:03.883 回答
-1

使用addCLass()jQuery 中的方法

$(".image").addClass("active");

是文档

于 2013-08-29T17:49:50.070 回答