自己用JQuery写了一个海报轮播图特效,核心代码如下:
(注:共七张轮播图,首尾衔接一张,其余五张为有效图。index取值为-1~5。其中0~4为有效图)
原理是设置一个index标记,根据当前index改变p的偏移位置
但是假设轮播图转换动画为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);
如果一次效果展示需要5s,那么5s内的其它效果切换操作应该视为无效。
你可以设置一个点击超时,用户点击一次后,不马上执行你动画,而是延迟一定时间例如100毫秒,如果在100毫秒后,用户没有进一步的点击行为,那么触发动画执行,如果有点击行为,那么取消上一次延时设置一个新的延时
这样就达到你的只接受一次事件的效果