首页 > 如何解决JQuery轮播图的动画和计数器不匹配问题?

如何解决JQuery轮播图的动画和计数器不匹配问题?

自己用JQuery写了一个海报轮播图特效,核心代码如下:
(注:共七张轮播图,首尾衔接一张,其余五张为有效图。index取值为-1~5。其中0~4为有效图)

原理是设置一个index标记,根据当前index改变div的偏移位置
但是假设轮播图转换动画为5s,则在5s内快速点击“下一页”四次,则动画共耗时20s,图片去到第四张

如何设置在5s内快速点击“下一页”四次,但只耗时5s,图片去到第二张?即,动画未完成则只接受一次事件

 //================上一页
        function toPrev(){
            index--;
            if(index==-1){
                index=4;
                index_point.eq(index).addClass("on").siblings().removeClass();
                list.animate({left:"0"},1000,function(){list.css("left","-500%")});
                return 0;
            }
            index_point.eq(index).addClass("on").siblings().removeClass();
            location = index_point.eq(index).attr("index")*(-100)+"%";
            list.animate({left:location},1000);
            console.log(index +" "+ list.css("left"));
        }
        //================下一页
        function toNext(){
            index++;
            if(index==5){
                index=0;
                index_point.eq(index).addClass("on").siblings().removeClass();
                list.animate({left:"-600%"},1000,function(){list.css("left","-100%")});
                return 0;
            }
            index_point.eq(index).addClass("on").siblings().removeClass();
            location = index_point.eq(index).attr("index")*(-100)+"%";
            list.animate({left:location},1000);
            console.log(index +" "+ list.css("left"));
        }

        //===============点击小箭头翻页
        prev.bind("click",toPrev);
        next.bind("click",toNext);

 1. if($(element).is(":animated")){    //判断元素是否正处于动画状态
//如果当前没有进行动画,则添加新动画
}
 2.var flag = true;
   在animate回调里调控flag。

你可以设置一个点击超时,用户点击一次后,不马上执行你动画,而是延迟一定时间例如100毫秒,如果在100毫秒后,用户没有进一步的点击行为,那么触发动画执行,如果有点击行为,那么取消上一次延时设置一个新的延时

这样就达到你的只接受一次事件的效果

var nextClickTimer;
function toNext(){
    t&&clearTimeout(t);
    t=setTimeout(function(){
       //执行动画正常流程
    },100);
}

如果一次效果展示需要5s,那么5s内的其它效果切换操作应该视为无效。

var nowDate=0;
function next(){
    if(new Date().getIime()-nowDate<5000){
        return;
    }
    nowDate=new Date().getIime();
    //干事情咯
    do();
}
【热门文章】
【热门文章】