2

setTimeout を実行してから innerHTML を変更する関数を作成しようとしています。

<script type="text/javascript">
    $(document).ready(function(){
        setTimeout(function(){
            document.getElementById("middlecolor").innerHTML='new text new text';
        }, 1000);
    });
</script>

質問: 表示される新しいテキストをアニメーション化するにはどうすればよいですか。つまり、一度にすべて書くのではなく、行ごとにアニメーション化できますか?

提案をありがとう!!

4

3 に答える 3

4

次のようなものを試してください。

<div id="text">
</div>

$(document).ready(function () {
    var interval = setInterval(function () {
        $('#text').append('<p style="display: none;">new text</p>');
        $('#text p:last').fadeIn('slow');
    }, 5000);
});

こちらの例をご覧ください

間隔を強制終了する場合は、次のようにすることができます。

clearInterval(interval);

Greatings。

于 2012-04-19T20:44:05.763 に答える
3

行ごとは少しトリッキーですが、可能です。

var ps = document.getElementById("text").children;
var i = 0;
var $p = $(ps[i]);

setTimeout(function newline(){
$p.css("height", function(index, h){
    h = parseInt(h);
    h += parseInt($p.css("line-height"));
    console.log(h,  ps[i].scrollHeight);
    if (h > ps[i].scrollHeight)
        $p = $(ps[++i]);
    return h;
}); 
if (i < ps.length)
    setTimeout(newline, 200);
}, 200);​

タイプライター効果を使用することをお勧めしますが、これも非常に好感が持てます: http://jsfiddle.net/pZb8W/1/

var ps = document.getElementById("text").children;
var i = 0;
var $p, text;
var speed = 20;

setTimeout(function newchar(){
if (!text) {
    $p = $(ps[i++]); 
    text = $p.text();
    $p.empty().show();
}
$p.append(document.createTextNode(text.charAt(0)));
text = text.slice(1);
if (text.length || i < ps.length)
    setTimeout(newchar, Math.random()*speed+speed);
}, 3*speed);​
于 2012-04-19T21:36:18.690 に答える
1

以下は、複数行のテキストを次々にアニメーション化する関数です。

<script type="text/javascript">
$(document).ready(function(){

function animateAddText(id, text, delta) {
    var lines = text.split("\n");
    var lineCntr = 0;
    var target = $("#" + id);

    function addLine() {
        if (lineCntr < lines.length) {
            var nextLine = "";
            if (lineCntr != 0) {
                nextLine = "<br>";
            }
            nextLine += lines[lineCntr++];
            $("<span>" + nextLine + "</span>").hide().appendTo(target).fadeIn(1000);
            setTimeout(addLine, delta);
        }
    }
    addLine();
}

var multilineText = "First line\nSecond Line\nThird Line\nFourth Line\nFifth Line";
animateAddText("middlecolor", multilineText, 1000);

});
</script>

そして動作するデモ: http://jsfiddle.net/jfriend00/Gcg5T/

于 2012-04-19T20:55:57.683 に答える