qina10 发表于 2019-12-18 17:10:05

求大神帮忙看下我这个轮播图为什么会延迟3秒执行的

$(function(){
    // banner
    var bannerbgimg = $(".banner .bannerbgi img");
    var i = 1;
    var time = 3000;
    var set = function(){
      bannerbgimg.eq(i).fadeIn(time).siblings().fadeOut(time);
      if(i < bannerbgimg.length){
            i += 1;
      }else{
            i = 0;
      }};
    var x = setInterval(set,time);
});

运行后要3秒后才执行,到最后一张图片的时候又要停3秒才重新开始轮播
小弟初学...基础不扎实,还望说明下原理{:5_96:}

不二如是 发表于 2019-12-19 08:16:15

因为设置 time 为 3s 啦:
var time = 3000;

qina10 发表于 2019-12-19 09:07:31

不二如是 发表于 2019-12-19 08:16
因为设置 time 为 3s 啦:

这个我知道,但是这个循环定时器不应该是直接执行的吗?为什么一次循环前后会有3秒左右的时间画面是停止不动的{:5_99:}

不二如是 发表于 2019-12-19 09:27:58

qina10 发表于 2019-12-19 09:07
这个我知道,但是这个循环定时器不应该是直接执行的吗?为什么一次循环前后会有3秒左右的时间画面是停止 ...



如上图所示,产生了“闭包”效果,在一个函数内部调用自身...

结合定时器,所以会循环前后都有 3s 停止

qina10 发表于 2019-12-26 14:02:00

记录下处理的结果:经过几天的研究和试验,我发现实际上setInterval实际上并不是马上运行的,而是等待时间到后才运行的。也就是说我们上面设置的time是3000,就是3000毫秒后运行,6000毫秒后再次运行,以此类推。至于说第二次循环的时候会出现3秒的停滞期,实际上是因为图片的张数没设置对,因为多出来了一张图片,所以出现了3秒的停止。最后我的处理方式是:先执行一次轮播,然后再调用setinterval定时器,获取length改成length-1
页: [1]
查看完整版本: 求大神帮忙看下我这个轮播图为什么会延迟3秒执行的