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);

伟大的。

于 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 回答