【问题标题】:Adding Class one by one , each class adding after one second逐个添加类,每个类在一秒后添加
【发布时间】:2014-11-23 19:10:38
【问题描述】:

我的目标:逐个添加类[test0 test1 test2]直到10,每个类在一秒钟后添加

$('.rating-block').AddClass('test0 test1 test2 ... test10' );

我的代码[只是尝试使用此代码,对此代码没有更多想法]

       for ( var i = 0; i < 11 ; i = i + 1 ) {
             setTimeout(function(){
                $( ".rating-block" ).addClass('test' +i);
                console.log(  i );
            },1000);
       }

【问题讨论】:

    标签: jquery html arrays


    【解决方案1】:

    最好在这里使用setInterval

    var i = 0
      , interval = null;
    
    interval = setInterval(function(){
        $( ".rating-block" ).addClass('test' +i);
        i++;
        if( i == 11 ) {
            clearInterval( interval );
        }
    },1000);
    

    因为使用setTimeout 将迫使您实现承诺功能或添加大约 10 个回调,您的代码会很丑。

    编辑:

    要反转,您可以简单地扩展上面的代码并添加另一个 setInterval

    if( i == 11 ) {
        clearInterval( interval );
        i = 10;
        interval = setInterval(function(){
            if( i == 0 ) {
                clearInterval( interval );
            }
            $( ".rating-block" ).removeClass('test' +i);
            i--;
        },1000);
    }
    

    jsFiddle demo

    【讨论】:

    • 我们可以在第 10 节课后逆转(撤课)吗? @antyrat
    【解决方案2】:
    for ( var i = 0; i < 11 ; i = i + 1 ) {
        (function (j) {
            setTimeout(function () {
                $( ".rating-block" ).addClass('test' + j);
                console.log( j );
            }, i * 1000);
        }(i));
    }
    

    JSFiddle Demo.


    更新:您可以简单地反转它:

    for ( var i = 10; i >= 0 ; i = i - 1 ) {
        (function (j) {
            setTimeout(function () {
                $( ".rating-block" ).removeClass('test' + j);
                console.log( j );
            }, (11 - i) * 1000);
        }(i));
    }
    

    您甚至可以将这些代码作为函数并循环(从 0 到 10 相加,然后从 10 到 0 移除,依此类推):

    function addClasses() {
        for ( var i = 0; i < 11 ; i = i + 1 ) {
            (function (j) {
                setTimeout(function () {
                    $( ".rating-block" ).addClass('test' + j);
                    console.log( j );
                }, i * 1000);
            }(i));
        }
    
        setTimeout(function () {
            removeClasses();
        }, 10 * 1000);
    }
    
    function removeClasses() {
        for ( var i = 10; i >= 0 ; i = i - 1 ) {
            (function (j) {
                setTimeout(function () {
                    $( ".rating-block" ).removeClass('test' + j);
                    console.log( j );
                }, (11 - i) * 1000);
            }(i));
        }
    
        setTimeout(function () {
            addClasses();
        }, 10 * 1000);
    }
    
    addClasses();
    

    JSFiddle Demo.

    【讨论】:

    • 这将在 1 秒后立即设置所有类,而不是每秒一个一个。
    • 哦,我现在看到你使用了i 变量,你是对的。您的解决方案也可以工作。
    • 第 10 节课后我们可以逆转(撤课)吗? @ROX
    • @ShibinRagh 是的,有可能,检查更新的答案,你也可以让它成为一个循环......
    猜你喜欢
    • 1970-01-01
    • 2016-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    • 2011-12-11
    • 1970-01-01
    相关资源
    最近更新 更多