JS类循环和循环

时间:2014-09-13 17:35:45

标签: javascript jquery class loops cycle

我试图创建一个循环显示类的js,然后循环回到开始。为了更好地说明我的意思;

我有一个句子,例如:

'我喜欢猫。'

我想要“猫”这个词。用“狗狗”,“仓鼠”,“狮子”这些词来代替。和' fish'例如。每2秒,一个单词将被另一个单词更改为淡入淡出,一旦到达最后一个单词,循环将再次开始。

我目前正试图通过让所有5个单词具有不同的类,并尝试每2秒更改每个类的显示来实现此目的。但是,我是js的新手,我意识到,这是不优雅的,也可能是不正确的。

提前感谢任何帮助人员:)

1 个答案:

答案 0 :(得分:0)

一种方法是使用javascript的setInterval功能每2秒更改一次。 你有一个动物的阵列,你用计数器循环它。每次计数器达到数组长度减1时,它将被重置。您可以停止循环清除setInterval。它是用clearInterval(变量)完成的,你在我们的例子中传入了setInterval变量 - animalsLoop。

代码:

<强> HTML:

<div class="js-animals"></div>

<强>使用Javascript:

var animals = ['cats', 'dogs', 'lions', 'fish'];
var counter = 0;

var animalsLoop = setInterval(function() {

    $('.js-animals').text(animals[counter]);

    if (counter === animals.length - 1) {
        counter = 0;
    } else {
        counter++;
    }
}, 2000);

JSFiddle: http://jsfiddle.net/x7wr4zLq/4/

编辑:如果你想要一个漂亮的淡出/渐变过渡,我们会忘记setInterval。我们将要使用的是带有循环函数的jQuery fadeIn()fadeOut()。所以发生的是我们调用循环[函数一旦fadeOut被触发,在它完成之后我们检查我们是否需要重置计数器并触发fadeIn。当fadeIn完成后,我们再次调用循环函数,依此类推......等等。

delay()用于表示fadeOut。您可以将其设置为在文本消失之前显示文本的时间。

代码:

<强> HTML:

<div class="js-animals"></div>

<强>使用Javascript:

var animals = ['cats', 'dogs', 'lions', 'fish'];
var counter = 0;

// Initialize the first animal 
// so that we don't wait for the first iteration
$('.js-animals').text(animals[counter]);

function loop() {

    $('.js-animals').delay(500).fadeOut(500, function() {

        // Check if we need to reset the counter
        if (counter === animals.length - 1) {
            counter = 0;
        } else {
            counter++;
        }

        $(this)
        .text(animals[counter])
        .fadeIn(500, loop);
    });
}

loop();

JSFiddle: http://jsfiddle.net/x7wr4zLq/3/