最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Jquery - Animate innerHTML possible? - Stack Overflow

programmeradmin0浏览0评论

I'm trying to have a function that does setTimeout, then changes the innerHTML:

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

Question: How could I animate the new text that appears, i.e. line by line as opposed to being written all at once?

Thanks for any suggestions!!

I'm trying to have a function that does setTimeout, then changes the innerHTML:

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

Question: How could I animate the new text that appears, i.e. line by line as opposed to being written all at once?

Thanks for any suggestions!!

Share Improve this question edited Apr 19, 2012 at 20:33 d-_-b asked Apr 19, 2012 at 20:28 d-_-bd-_-b 23.2k43 gold badges171 silver badges285 bronze badges 2
  • 1 Yes. Don't use .innerHTML. Take a look at this: stackoverflow./questions/1520178/… – Matt Ball Commented Apr 19, 2012 at 20:29
  • would I do animate.setTimeout? or put jquery html() inside an animate script? – d-_-b Commented Apr 19, 2012 at 20:31
Add a ment  | 

3 Answers 3

Reset to default 4

Try something like this:

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

See the example here

If you want to kill the interval, can be doing this:

clearInterval(interval);

Greatings.

Line-by-line is a bit tricky, but 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);​

I'd suggest to use a typewriter effect, which is also very likable: http://jsfiddle/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);​

Here's a function that would animate in multiple lines of text, one after the other:

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

And a working demo: http://jsfiddle/jfriend00/Gcg5T/

发布评论

评论列表(0)

  1. 暂无评论