加载“...”循环,每3秒更改一次文本

时间:2013-12-08 11:11:45

标签: javascript jquery loops

JSFiddle: http://jsfiddle.net/6A7xh/1/

此脚本的目的是输出

装载

[1秒延迟] - >

中..

[1秒延迟] - >

加载...

[1秒延迟] - >

绘画蒙娜丽莎。

[1秒延迟] - >

绘画蒙娜丽莎......

[等等]


所以这里的东西:

 loadList = [
    "Loading the good stuff",
    "Painting Mona Lisa",
    "Just a second longer",
    "Or not",
    "Oh! We forgot to plug it in",
    "That's better",
    "Well",
    "Maybe not",
    "Wondering why",
    "your internet is so slow",
    "Still",
    "Loading",
];


var i = 0;
var x = 0;

function loadTrans(x){
        //if (!$(window).ready){
            $(".intro > p").text(loadList[x]);
            playTrans();
        //}
}

function playTrans(){
    currentText = $(".intro > p").text();
    setTimeout(function(){
        $(".intro > p").text( currentText + ".");
        if(i == 3){
            x++;
            loadTrans(x);
        }
        i++;
        if(i < 4){
            playTrans();
            i = 0;
        }

    },1000);
}

loadTrans();

我认为我尝试做的事情很清楚,但到目前为止,我的方法似乎失败了。现在,脚本在一个永无止境的循环中添加句点,并且每三个循环都不会发生转换。

我在这里做错了什么?有谁知道我可以更整洁地做到这一点?

注意:我最初使用for循环执行此操作,但在这种情况下setTimeout显然失败了。

2 个答案:

答案 0 :(得分:2)

You can do this。你可以将它放在一个函数中,并将计时器放在一个变量中。当您的资源全部加载完毕后,您可以使用clearInterval清除计时器。

 var i = 0;
 var textarea = $('.intro p');

 var loadTimer = setInterval(function () {
     if (i % 4 === 0) textarea.text(loadList[i / 4]); //change text after 3 steps
     else textarea.text(textarea.text() + '.');       //add period
     ((i / 4) < loadList.length) ? i++ : i = 0;       //back to start
 }, 500);

答案 1 :(得分:0)

一个问题:

i++;
if (i < 4) { 
    i = 0; // i : 0, 1, 0, 1...
}