javascript - setInterval为什么只执行一次
黄舟
黄舟 2017-06-30 09:55:19
0
7
923
  • 简单的背景切换

jquery部分

$(function(){ function direct(){ for(var i=0;i<2;i++){ $(".bg_img").eq(i).show().siblings().hide(); } } setInterval(direct,1000); })

html部分

css部分

.bg2默认display:none;

  • setInterval()只执行了一次,就想问为啥进入不了第二次?

各位大佬不要鄙视我,感谢您的解答~

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复 (7)
ringa_lee

不是鄙视你,但这明显是语法问题……实际上我认为 setInterval 一直都在执行,但是你的函数direct的运行结果是固定的,循环的最终结果是第二张显示第一张隐藏,所以看起来好像没执行一样。

你应该这样做:

var current = 0; function direct(){ $(".bg_img").eq(current).show() .siblings().hide(); current++; if (current > 1) { current = 0; } }

这里用到了闭包,把状态保存在定时器的外面,才能够每次往下循环。

另外再补充一点渲染的知识。对于这种用for循环改变视图状态,浏览器会把这些状态都缓存起来,然后择机渲染,而不是你一修改它就立刻渲染。所以你连闪一下都看不到。

    学习ing

    参考一下

    $(function(){ function direct(i){ $(".bg_img").eq(i).show().siblings().hide(); } var i = 0; setInterval(function () { direct(i) i = (i + 1) % $(".bg_img").length }, 1000); })
      習慣沉默

      setInterval(function direct(){

      雷雷
        滿天的星座

        循环一次之后i的值为1 然后就一直是1 用let试试

          过去多啦不再A梦

          你是不是要的这种效果,按顺序一个一个显示?

          jQuery(function($){ var bgImg = $(".bg_img"), maxIndex = bgImg.length - 1, i = 0; function direct(){ bgImg.eq(i).show().siblings().hide(); if (i < maxIndex) { i++; } else { i = 0; } } setInterval(direct, 1000); });
            为情所困

            $(函数(){

            雷雷

            })

              滿天的星座
              setInterval(direct(),1000);

              不知道对不对,但是总感觉是这个的问题

                最新下载
                更多>
                网站特效
                网站源码
                网站素材
                前端模板
                关于我们 免责声明 Sitemap
                PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!