jQuery - 多个setInterval冲突

时间:2011-02-07 23:07:29

标签: jquery conflict setinterval

我是一名jQuery新手,以下每项工作都可以自行完成,但在一起工作时却没有时间。我究竟做错了什么?对代码的任何改进也将受到赞赏......它将被用于轮换广告。

<!--- Header Rotator --->
<script type="text/javascript">
$(document).ready(function() {
    $("#header").load("header.cfm");
    var refreshHeader = setInterval(function() {
        $("#header").load("header.cfm");
    }, 10000);
});
</script>
<!--- Main Rotator --->
<script type="text/javascript">
$(document).ready(function() {
    $("#main").load("main.cfm");
    var refreshMain = setInterval(function() {
        $("#main").load("main.cfm");
    }, 5000);
});
</script>
<!--- Footer Rotator --->
<script type="text/javascript">
$(document).ready(function() {
    $("#footer").load("footer.cfm");
    var refreshFooter = setInterval(function() {
        $("#footer").load("footer.cfm");
    }, 2000);
});
</script>

2 个答案:

答案 0 :(得分:3)

如果您使用jQuery已经检查过此插件http://plugins.jquery.com/project/timers,则知道有多个setintervterval时序有时会出现一些问题。因此,如果你修复你的代码,如Isaac建议,你发现它仍然无法工作尝试这个:而不是制作多个计时器,我将制作1个调度程序功能,以你的最低延迟(在这种情况下2000),然后放一个计数器,每次增加2000并执行if((counter%2000)== 0){action1code;}之类的操作 if((counter%6000)== 0){action2code} if((counter%10000)== 0){action3code}

希望很清楚,我现在不要敏锐:)

更新:嗯,我不能在没有你的代码或自己编写一大堆的情况下测试这个,但我相信这对你有用(尽管我今天的注意力很低,所以我可能错过了一些明显的东西; D) 。用以下代码替换上面的所有代码:

 <script type="text/javascript">
 count = 10000; // this is so it will load everything the first time through.
 function timerFired () {
      if((count % 2000)==0){
           $("#footer").load("footer.cfm");
      }
      if ((count % 6000)==0) {
           $("#main").load("main.cfm");
      }
      if ((count % 10000)==0){
           $("#header").load("header.cfm");
           count =0;
      }
      count = count + 2000;
 }
 $(document).ready(function() {
     var refreshHeader = setInterval(timerFired(),2000);
  });
 </script>

P.S。如果直接从浏览器访问,请不要忘记清除浏览器缓存并确保.cfm正在按预期更改。

答案 1 :(得分:3)

使用一个setInterval。你可以这样整理代码:

$(document).ready(function() {
     refreshCounter = 0;
     $("#header").load("header.cfm").data({refresh: 10});
     $("#main"  ).load("main.cfm"  ).data({refresh:  5});
     $("#footer").load("footer.cfm").data({refresh:  2});
     var refreshHeader = setInterval(function() {
         refreshCounter++;
         $("#header, #main, #footer").each(function(){
             var $this   = $(this);
             var refresh = $this.data('refresh');
             if ((refreshCounter % refresh) == 0) {
                 var cfmFile = this.id + '.cfm';
                 $this.load(cfmFile);
             }
         });
     },
     1000);
});