【问题标题】:Jquery - Animate innerHTML possible?Jquery - 动画 innerHTML 可能吗?
【发布时间】:2012-04-19 20:28:06
【问题描述】:

我正在尝试使用一个执行 setTimeout 的函数,然后更改 innerHTML:

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

问题:我怎样才能使出现的新文本动画化,即逐行而不是一次全部写入?

感谢您的任何建议!

【问题讨论】:

标签: javascript jquery html jquery-animate innerhtml


【解决方案1】:

试试这样的:

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

查看示例here

如果你想杀死间隔,可以这样做:

clearInterval(interval);

伟大的。

【讨论】:

  • 一个问题,,,我如何让它停止!? jsfiddle.net/dankpiff/7Jve8/4
  • 你需要杀死间隔,像这样: clearInterval(interval) ...“间隔指针”存储在间隔变量中。
【解决方案2】:

逐行有点棘手,但possible

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

【讨论】:

    【解决方案3】:

    这是一个可以在多行文本中逐行显示动画的函数:

    <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/

    【讨论】:

    • 谢谢,但我无法让它工作:jsfiddle.net/dankpiff/2AtwM
    • 获取最新版本,您可以在我提供的 jsFiddle 链接中看到它的工作原理。在我修复几个问题之前,你选择了一个版本。
    猜你喜欢
    • 1970-01-01
    • 2011-07-29
    • 1970-01-01
    • 2013-04-17
    • 1970-01-01
    • 1970-01-01
    • 2011-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多