41292


もともと、html側で要素をつくった場合はうまくいきます。

[code]

    [css]
    
        .box{
            width:100px;
            height:100px;
            background:tomato;
            transition: 3s;
        }
    
        .blue{
            background:skyblue;
        }
    
    
    
    
    
        [js]
    
        $(function(){
            //要素をつくる
            var box = $('<div class="box">');
    
            //表示する
            $('body').append(box);
            box.addClass('blue');//アニメーション
    
        });
    
[/code]


CC BY-SA 3.0
2018-01-29T08:01:41.263
41289
2018-01-29T12:34:49.853
2018-01-29T08:41:46.673
12297
12297
question
javascript jquery css
jQueryで生成した要素に対してaddClasssでアニメーションが効かない


本当はよろしくないけどDOMの読み込み準備が出来た後に`setTimeout`入れて処理。  
特定の親DOMの変更を監視して自分でイベント作らないとキチンとはできないんじゃないかなぁ  
関連：[jQuery
動的に読み込んだDOM要素の表示完了時にjQueryプラグインを適用したい](https://ja.stackoverflow.com/questions/27279/)

もしくは[jQueryのanimate関数](http://semooh.jp/jquery/api/effects/animate/params%2C+%5Bduration%5D%2C+%5Beasing%5D%2C+%5Bcallback%5D/)を使用するかだと思います

[code]

    $(function(){
    
        //要素をつくる
        var box = $('<div id="debug" class="box">');
    
        //表示する
        $('body').append(box);
        
        //boxの準備を待つ
        box.ready(function() {
            setTimeout(function(){
                box.addClass('blue');//アニメーション
            }, 10);
        });
    });
[/code]

[code]

    .box{
        width:100px;
        height:100px;
        background:tomato;
        transition: 3s;
    }
    
    .blue{
        background:skyblue;
    }
[/code]

[code]

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
[/code]

* * *

[backgroundColorに対策しないといけないようですね。](https://stackoverflow.com/questions/190560/)(ｼﾗﾅｶｯﾀ)

[code]

    //対策
    (function(d){d.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor","borderTopColor","color","outlineColor"],function(f,e){d.fx.step[e]=function(g){if(!g.colorInit){g.start=c(g.elem,e);g.end=b(g.end);g.colorInit=true}g.elem.style[e]="rgb("+[Math.max(Math.min(parseInt((g.pos*(g.end[0]-g.start[0]))+g.start[0]),255),0),Math.max(Math.min(parseInt((g.pos*(g.end[1]-g.start[1]))+g.start[1]),255),0),Math.max(Math.min(parseInt((g.pos*(g.end[2]-g.start[2]))+g.start[2]),255),0)].join(",")+")"}});function b(f){var e;if(f&&f.constructor==Array&&f.length==3){return f}if(e=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(f)){return[parseInt(e[1]),parseInt(e[2]),parseInt(e[3])]}if(e=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(f)){return[parseFloat(e[1])*2.55,parseFloat(e[2])*2.55,parseFloat(e[3])*2.55]}if(e=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(f)){return[parseInt(e[1],16),parseInt(e[2],16),parseInt(e[3],16)]}if(e=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(f)){return[parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16),parseInt(e[3]+e[3],16)]}if(e=/rgba\(0, 0, 0, 0\)/.exec(f)){return a.transparent}return a[d.trim(f).toLowerCase()]}function c(g,e){var f;do{f=d.css(g,e);if(f!=""&&f!="transparent"||d.nodeName(g,"body")){break}e="backgroundColor"}while(g=g.parentNode);return b(f)}var a={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]}})(jQuery);
    
    $(function(){
    
        //要素をつくる
        var box = $('<div class="box">');
    
        //表示する
        $('body').append(box);
        
        //boxの準備を待つ
        box.ready(function() {
            $(box).animate({ 
              "backgroundColor":"#87CEEB"
            }, 300 );//アニメーション
        });
    });
[/code]

[code]

    .box{
        width:100px;
        height:100px;
        background:tomato;
        transition: 3s;
    }
    
    .blue{
        background:skyblue;
    }
[/code]

[code]

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
[/code]


CC BY-SA 3.0
2018-01-29T08:52:33.803
41290
2018-01-29T09:12:28.610
2018-01-29T09:12:28.610
41289
answer


[`requestAnimationFrame`](https://developer.mozilla.org/ja/docs/Web/API/Window/requestAnimationFrame)で1フレーム遅らせることで可能です。

[code]

        $(function(){
            //要素をつくる
            var box = $('<div class="box">');
    
            //表示する
            $('body').append(box);
            requestAnimationFrame(()=> box.addClass('blue'));//アニメーション
    
        });
[/code]

[code]

       .box{
            width:100px;
            height:100px;
            background:tomato;
            transition: 3s;
        }
    
        .blue{
            background:skyblue;
        }
[/code]

[code]

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
[/code]


CC BY-SA 3.0
2018-01-29T09:45:55.580
41292
2018-01-29T12:34:49.853
2018-01-29T12:34:49.853
2376
2376
41289
answer