0

これをもっと簡単にするにはどうすればよいですか??

var i = 0;
    $(this).find(".ui-stars-star-on-large:eq("+i+")").animate({width: w+'px'}, 200, "swing", function() {
        i++;
        $(this).parent().find(".ui-stars-star-on-large:eq("+i+")").animate({width: w+'px'}, 200, "swing", function() {
            i++;
            $(this).parent().find(".ui-stars-star-on-large:eq("+i+")").animate({width: w+'px'}, 200, "swing", function() {
                i++;
                $(this).parent().find(".ui-stars-star-on-large:eq("+i+")").animate({width: w+'px'}, 200, "swing", function() {
                    i++;
                    $(this).parent().find(".ui-stars-star-on-large:eq("+i+")").animate({width: w+'px'}, 200, "swing", function() {
                        i++;
                    });
                });
            });
        });
    });
4

3 に答える 3

1

再帰を使用できます:

var w = 200;    
function animate(count, i) {
    $(this).find(".ui-stars-star-on-large:eq(" + i + ")").animate({
        width: w + "px"
    }, 200, "swing", function () {
        i++;
        if (i < count) animate(count, i);
    }}
}

animate(5, 1);

または遅延を使用:

for(var i = 0; i < 5; i++) {
     $(this).find(".ui-stars-star-on-large:eq(" + i + ")")
        .delay(i * 200)
        .animate({
            width: w + "px"
        }, 200, "swing")
}
于 2013-04-11T21:23:08.323 に答える
1

setTimeoutアニメーションが軽くてパフォーマンスが良い場合は、サイクルを使用できます

var $this = $(this),
    $stars = $this.parent().find(".ui-stars-star-on-large");
for (var i = 0; i < 5; i++) {
    var _i = i;
    setTimeout(function(){
        $stars().eq(_i).animate({width: w+'px'}, 200, "swing")
   }, 200*i);
}
于 2013-04-11T21:51:04.137 に答える