2012-04-10 69 views
4

由于某种原因,这不会在每次发布类的元素上添加和删除一个新的类,每4秒一次。 jquery加载正确,就像这样。 chrome显示代码没有错误。如何在jQuery中每4秒添加和删除一个类

$(document).ready(function(){ 
    $('.post').addClass('display').delay(4000).removeClass('display'); 
}); 
+0

请原谅我这么说,但这种做法看起来像一个主要的kludge。你确定你真的想要这样做吗? – JohnFx 2012-04-10 18:59:38

+0

你会怎么做? – 2012-04-10 19:00:00

+1

如果您告诉我们您为什么这样做,我们可能会提供更好的答案。 – 2012-04-10 19:00:11

回答

19

既然你列出你希望这每4秒发生,你可以简单地使用setInterval()

var $post = $(".post"); 
setInterval(function(){ 
    $post.toggleClass("display"); 
}, 4000); 

,选择在$post缓存最大限度地减少DOM在每个时间间隔上查询的次数。

Example on jsfiddle

+0

嗯由于某种原因,它不工作...... http://guardianweb.edulence.com/model8/ – 2012-04-10 19:30:45

+0

@KeganQuimby马克的帖子中有一个不可见的字符,导致语法错误,请再次粘贴它。 – Esailija 2012-04-10 20:07:06

+0

当活动选项卡失去焦点时,setInterval队列中的功能是否会执行?或者它只是节制时间间隔?我永远不会记得。 – zzzzBov 2012-04-10 20:38:24

3

.delay只能与其他动画的方法,而不是addClassremoveClass。试试这个:

$('.post').addClass('display'); 
setTimeout(function(){ $('.post').removeClass('display'); },4000); 

如果你想要它继续添加和删除,你需要获得更多的创意。您可以使用setInterval和8000毫秒的延迟,但这也会延迟第一个addClass。另一种方法是使用嵌套的下一个定时器,和一个递归函数调用(连同toggleClass缩短代码):

function addRemoveClass() { 
    var delay = 4000; // milliseconds 
    setTimeout(function() { 
     $('.post').toggleClass('display'); 
     addRemoveClass(); 
    }, delay); 
}; 
addRemoveClass(); 

http://jsfiddle.net/mblase75/jU8cj/

(将其设定为1000毫秒,并设置.display是透明的,以及 - you've just re-invented the blink tag

5

假设你要到四秒后切换类名:

setTimeout(function(){ 
    $('.post').toggleClass('display'); 
},4000); 

JS Fiddle demo

用于切换每4秒(虽然@Mark已经发布了setInterval的选择,我加入这个回复我的帖子,同时......我要离开了,但我承认,马克得到了它在前):

setInterval(function(){ 
    $('.post').toggleClass('display'); 
},4000); 

JS Fiddle demo

参考文献:

+1

在'delay' PARAM'的setTimeout/setInterval'是多少,我不当你把它作为一个字符串传递时,确定会发生什么 – 2012-04-10 19:22:49

+0

字符串?字符串..?我不知道你的意思。 *咳嗽*〜编辑〜*咳嗽* ... – 2012-04-10 19:27:52

+0

老实说,我不知道为什么我没有想到这一点。但是我会保留我的解决方案,以防万一有人想实现简单切换以外的功能。 – Blazemonger 2012-04-10 21:10:02

0

类似的东西:

jQuery(document).ready(function($) { // ready 
     var refresh=function(){ 

     $('.post').toggleClass('display'); //switch 

       }//end refresh 
    setInterval(refresh,4000); 
}); 
1

我想你想要更多的东西一样:

$(document).ready(function(){ 
    setInterval(addRemoveClass,4000); 
}); 

function addRemoveClass() { 
    $('.post').toggleClass('display'); 
} 
0

.delay()只延迟动画,而不是功能。你可以使用JavaScript的本地setTimeout方法。

function toggleDisplay() { 
    $('.post').toggleClass("display"); 
    setTimeout(function(){ toggleDisplay(); },'1000'); 
} 
toggleDisplay(); 
1

只能在jQuery中queued动作中使用delay。幸运的是,将项目添加到队列相对来说比较简单:

$(selector).delay(duration).queue(function (next) { 
    $(this).doStuff(); 
    doOtherStuff(); 
    next(); 
}); 

提供给函数的参数是一个函数,告诉队列继续,如果你要执行异步操作,如使用$.ajax

为了得到一个循环,只需重新排队排队功能:

jQuery(function ($) { 
    "use strict"; 
    function toggleDisplayClass(next) { 
     $(this).toggleClass('display') //toggles the class 
      .delay(4000)    //waits 4 seconds 
      .queue(toggleDisplayClass); //requeued 
     next();       //continues on the queue 
    } 
    $('.post').queue(toggleDisplayClass); 
}); 

你可以看到这个动作上my updated fiddle