2014-09-13 84 views
0

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

我有句话,例如:

'我喜欢猫'。

例如,我想用“狗”,“仓鼠”,“狮子”和“鱼”两个词来代替“猫”一词。每隔2秒钟,一个字将被淡入淡出,另一个淡入淡出,一旦到达最后一个字,该循环将再次开始。

我目前正试图通过让所有5个单词与一个不同的类,并试图每2秒更改每个类的显示。然而,我对js是新手,我意识到,这是不雅的,可能是不正确的。

在此先感谢您的帮助球员:)

回答

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()用于淡入淡出。您可以将其设置为在文本消失之前显示文本多长时间。

代码:

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/

+0

谢谢你,文字的改变非常出色。我只是想知道是否有一种方法可以为此添加过渡效果>即淡入淡出每个单词? – 2014-09-14 12:29:32

+0

当然可以。使用jQuery [fadeIn()](http://api.jquery.com/fadein/)和[fadeOut()](http://api.jquery.com/fadeout/),您可以在每个间隔。我刚刚编辑了我的答案。如果您发现它有帮助,请加注:) – 2014-09-14 12:54:14

+0

新编辑。我已经重写了我的淡入/淡出代码。现在它更加正确 - 检查出来。 – 2014-09-14 13:13:32