您好,登录后才能下订单哦!
基本样式:
HTML代码:
<div class="container"> <div class="list"> <!--轮播广告图--> <ul class="listImg clearfix" > <li><a href="#"><img src="img/6.jpg" alt="图片六"></a></li> <li><a href="#"><img src="img/1.jpg" alt="图片一"></a></li> <li><a href="#"><img src="img/2.jpg" alt="图片二"></a></li> <li><a href="#"><img src="img/3.jpg" alt="图片三"></a></li> <li><a href="#"><img src="img/4.jpg" alt="图片四"></a></li> <li><a href="#"><img src="img/5.jpg" alt="图片五"></a></li> <li><a href="#"><img src="img/6.jpg" alt="图片六"></a></li> <li><a href="#"><img src="img/1.jpg" alt="图片一"></a></li> </ul> <!--中间的6个小按钮--> <ul class="buttons clearfix"> <li class="active"><span index="1"></span></li> <li><span index="2"></span></li> <li><span index="3"></span></li> <li><span index="4"></span></li> <li><span index="5"></span></li> <li><span index="6"></span></li> </ul> <!--左右点击按钮--> <a href="#" class="arrow" id="prev"><</a> <a href="#" class="arrow" id="next">></a> </div> </div>
CSS代码:
*{margin:0; padding:0;} ul{list-style:none;} a{text-decoration:none;} .clearfix{zoom:1;} .clearfix:after{display:block; content:''; clear: both;} .container{position:relative; width:790px; height:340px; margin:100px auto; overflow:hidden;} .listImg{position:absolute; width:6320px; height:340px;} .listImg li{float:left;} .listImg li a img{width:100%;} /*箭头样式*/ .arrow{ width:30px; height:60px; line-height:60px; text-align:center; background:rgba(0,0,0,.3); color:#fff; font-size: 2em; z-index:100; cursor:pointer; position:absolute; top:40%; display:none; } .arrow:hover{background:rgba(0,0,0,0.6);} #prev{left:20px;} #next{right:20px;} .container:hover .arrow{display:block;} /*鼠标进入轮播图才显示两个按钮*/ /*小按钮样式*/ .buttons{position:absolute; bottom:20px; left:45%; z-index:100;} .buttons li{float:left; margin-right:10px;} .buttons li span{display:block; width:10px; height:10px; border-radius:50%; background:#fff; cursor:pointer;} .buttons li.active span{background:#f00;}
第一步:点击左右箭头实现图片左右滚动
每张图片的宽度是790px,点击左箭头时,图片向左移动,.listImg的left值会减790px;点击右箭头时,图片向右移动,.listImg的left值会加790px
//点击左箭头 $('#prev').click(function(e){ e.preventDefault(); var left = parseInt($('.listImg').css('left'))-790; console.log(left); $('.listImg').css('left', left); }); //点击右箭头 $('#next').click(function(e){ e.preventDefault(); var left = parseInt($('.listImg').css('left'))+790; console.log(left); $('.listImg').css('left', left); });
以上代码的重复量还是比较大的,点击左右两个箭头,一个是加790,一个是减790,所以,可以封装一个函数
//点击左箭头 $('#prev').click(function(e){ e.preventDefault(); play(-790); }); //点击右箭头 $('#next').click(function(e){ e.preventDefault(); play(790); }); function play(offset){ var left = parseInt($('.listImg').css('left'))+offset; console.log(left); $('.listImg').css('left', left); }
效果:
第二步:点击左右箭头无限滚动
从上例中可以看到,当 left值等于 -790px时,显示第1张图片,left值为0时,图片列表加载到第1张图片的附属图(图六“每满1000,立减100”),再次点击,left变成790px 同时没有图片显示,所以,当left大于 -790px时,要把left值变为-4740px,让图片跳到第6张
当left值等于-4740px时,图片加载到第6张图,当left值小于-4740px 时,图片列表加载到第6张图片的附属图(图一“30天包退,180天包换”),之后就出现了空白,不显示广告图。所以,当left值小于-4740px时,要把left值变成-790px,让图片跳到第1张
//点击左箭头 $('#prev').click(function(e){ e.preventDefault(); play(-790); }); //点击右箭头 $('#next').click(function(e){ e.preventDefault(); play(790); }); function play(offset){ var lists = $('.listImg'); var left = parseInt(lists.css('left'))+offset; lists.css('left', left); //当left值等于-790时,显示的是第一张图,点右箭头,图片右移 //再次点击时,图片加载到第一张图的附属图(图6),再点就露白了 // 所以left大于-790时,让left变成-4740(跳到第6张图) if(left>-790){ lists.css('left',-4740); //当left值等于-4740时,显示的是第六张图,点击左箭头,图片左移 //再次点击时,图片加载到第六张图的附属图(图一),再点就露白了 //所以left小于-4740时,让left变成-790(跳到第1张图) }else if(left<-4740){ lists.css('left',-790); } }
效果:
第三步:图片滚动时,激活对应的小圆点
获取所有的小圆点数组,点击箭头时,让数组加1或减1,对应的小圆点加上active 这个class
var lists = $('.listImg'); //当前播放的是哪张图片对应的小圆点 var index =1; //获取所有的小圆点 var btns = $('.buttons li'); //“激活”对应的小圆点 function showButton(){ //btns的下标从0开始,index从1到6,共6个小圆点,实际的图片下标是index-1 btns.eq(index-1).addClass('active').siblings('.active').removeClass('active'); } //点击左箭头 $('#prev').click(function(e){ e.preventDefault(); //向左时,index减1 index-=1; showButton(); play(-790); }); //点击右箭头 $('#next').click(function(e){ e.preventDefault(); //向右时,index加1 index+=1; showButton(); play(790); });
效果:
上图中有一个问题,当点击箭头超过数组最大下标时,就没有小圆点变红了,而数组最大下标是5。所以,在点箭头的时候需要对下标做一个判断,index=6,就让index=1;index=1,就让index=6 (数组的index是0到5,小圆点的index是1到6,数组的index=小圆点index-1)
//点击左箭头 $('#prev').click(function(e){ e.preventDefault(); //index=1,就让index=6,否则加1 index==1?index=6:(index-=1); showButton(); play(-790); }); //点击右箭头 $('#next').click(function(e){ e.preventDefault(); //index=6,就让index=1,否则减1 index==6?index=1:(index+=1); showButton(); play(790); });
效果:
第四步:点击小圆点,切换对应的广告图
图片之所以能滚动,最主要是play方法中的 offset参数起了作用,右向滚动一张,则left值加上790px,因此,滚动三张,left值加上790px *3,反之亦然
同样的道理,当小圆点默认在第一个时,点击第3个小圆点时,要跳到第三张图片,left值就是(3-1)*790,即 (targetIndex - index)*790 (targetIndex:要点击哪个小圆点,index:当前的小圆点)
//点击小圆点,切换图片 btns.click(function(){ //获取被点击的小圆点的自定义属性index的值 var targetIndex = parseInt($(this).children().attr('index')); console.log(targetIndex); //定义图片的偏移量 var offset = -790 * (targetIndex - index); play(offset); //更新当前的index index = targetIndex; showButton(); });
效果:
上图中,当重复点一个小圆点的时候,程序还在不断的获取自定义的index值,也就是说还在不断的去执行play方法,这个是完全没有必要的。
这里可以做一个判断
//点击小圆点,切换图片 btns.click(function(){ //如果被点击的小圆点已经是被选中了的那一个(简单说就是重复点一个小圆点) // 而被选中的小圆点都会加上一个active if($(this).hasClass('active')){ return; //直接退出点击事件的方法 } //获取被点击的小圆点的自定义属性index的值 var targetIndex = parseInt($(this).children().attr('index')); console.log(targetIndex); //定义图片的偏移量 var offset = -790 * (targetIndex - index); play(offset); //更新当前的index index = targetIndex; showButton(); });
效果:(反复点的时候,不再获取index为4的值,即不再重复执行其它方法)
第五步:添加动画,自动播放
页面一加载完成,图片就自动向左滑动,而向左滑动这个是可以通过点击右箭头实现的,所以我们需要定义一个启动方法,在方法里面为右箭头匹配点击事件,并触发play方法播放动画
//间隔时间,多少毫秒播一次 var interval = 3000; var timer; //启动动画 function start() { timer = setInterval(function () { $('#next').trigger('click'); play(); }, interval); } start();
效果:
第六步:停止动画
当鼠标进入广告图或者是点击左右箭头、小圆点的时候,动画就应该终止
//停止动画 function stop() { clearTimeout(timer); } $('.container').hover(stop, start); //鼠标移入停止,移出启动 //点击左箭头 $('#prev').click(function(e){ e.preventDefault(); //终止动画 if(lists.is(':animated')){ return; } //index=1,就让index=6,否则加1 index==1?index=6:(index-=1); showButton(); play(-790); }); //点击右箭头 $('#next').click(function(e){ e.preventDefault(); //终止动画 if(lists.is(':animated')){ return; } //index=6,就让index=1,否则减1 index==6?index=1:(index+=1); showButton(); play(790); }); //点击小圆点,切换图片 btns.click(function(){ //如果被点击的小圆点已经是被选中了的那一个(简单说就是重复点一个小圆点) // 而被选中的小圆点都会加上一个active if($(this).hasClass('active') || lists.is(':animated')){ return; //直接退出点击事件的方法 } //获取被点击的小圆点的自定义属性index的值 var targetIndex = parseInt($(this).children().attr('index')); //定义图片的偏移量 var offset = -790 * (targetIndex - index); play(offset); //更新当前的index index = targetIndex; showButton(); });
效果:
当然,图片滑动的时候,最好是能用上animate事件,有一个动画的效果,而不是直接的切换某一张图片到哪个位置上。
代码汇总:
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <style> *{margin:0; padding:0;} ul{list-style:none;} a{text-decoration:none;} .clearfix{zoom:1;} .clearfix:after{display:block; content:''; clear: both;} .container{position:relative; width:790px; height:340px; margin:100px auto; overflow:hidden;} .listImg{position:absolute; width:6320px; height:340px;} .listImg li{float:left;} .listImg li a img{width:100%;} /*箭头样式*/ .arrow{ width:30px; height:60px; line-height:60px; text-align:center; background:rgba(0,0,0,.3); color:#fff; font-size: 2em; z-index:100; cursor:pointer; position:absolute; top:40%; display:none; } .arrow:hover{background:rgba(0,0,0,0.6);} #prev{left:20px;} #next{right:20px;} .container:hover .arrow{display:block;} /*鼠标进入轮播图才显示两个按钮*/ /*小按钮样式*/ .buttons{position:absolute; bottom:20px; left:45%; z-index:100;} .buttons li{float:left; margin-right:10px;} .buttons li span{display:block; width:10px; height:10px; border-radius:50%; background:#fff; cursor:pointer;} .buttons li.active span{background:#f00;} </style> </head> <body> <div class="container"> <div class="list"> <!--轮播广告图--> <ul class="listImg clearfix" > <li><a href="#"><img src="img/6.jpg" alt="图片六"></a></li> <li><a href="#"><img src="img/1.jpg" alt="图片一"></a></li> <li><a href="#"><img src="img/2.jpg" alt="图片二"></a></li> <li><a href="#"><img src="img/3.jpg" alt="图片三"></a></li> <li><a href="#"><img src="img/4.jpg" alt="图片四"></a></li> <li><a href="#"><img src="img/5.jpg" alt="图片五"></a></li> <li><a href="#"><img src="img/6.jpg" alt="图片六"></a></li> <li><a href="#"><img src="img/1.jpg" alt="图片一"></a></li> </ul> <!--中间的6个小按钮--> <ul class="buttons clearfix"> <li class="active"><span index="1"></span></li> <li><span index="2"></span></li> <li><span index="3"></span></li> <li><span index="4"></span></li> <li><span index="5"></span></li> <li><span index="6"></span></li> </ul> <!--左右点击按钮--> <a href="#" class="arrow" id="prev"><</a> <a href="#" class="arrow" id="next">></a> </div> </div> <script src="dist/jquery-1.8.3.min.js"></script> <script> var lists = $('.listImg'); //获取所有的小圆点 var btns = $('.buttons li'); //当前播放的是哪张图片对应的小圆点 var index =1; //广告图片的张数 var len = 6; //间隔时间,多少毫秒播一次 var interval = 3000; var timer; //滚动图片 function play(offset){ var left = parseInt(lists.css('left'))+offset; if (offset>0) { offset = '+=' + offset; } else { offset = '-=' + Math.abs(offset); } lists.animate({'left':offset},500,function(){ if(left>-790){ lists.css('left', -790*len); }else if(left< -790*len ){ lists.css('left', -790); } }) } //启动动画 function start() { timer = setInterval(function () { $('#next').trigger('click'); play(); }, interval); } //停止动画 function stop() { clearTimeout(timer); } //点击左箭头 $('#prev').click(function(e){ e.preventDefault(); if(lists.is(':animated')){ return; } //index=1,就让index=6,否则加1 index==1?index=len:(index-=1); showButton(); play(-790); }); //点击右箭头 $('#next').click(function(e){ e.preventDefault(); if(lists.is(':animated')){ return; } //index=6,就让index=1,否则减1 index==len?index=1:(index+=1); showButton(); play(790); }); //“激活”对应的小圆点 function showButton(){ //btns的下标从0开始,index从1到6,共6个小圆点,实际的图片下标是index-1 btns.eq(index-1).addClass('active').siblings('.active').removeClass('active'); } //点击小圆点,切换图片 btns.click(function(){ //如果被点击的小圆点已经是被选中了的那一个(简单说就是重复点一个小圆点) // 而被选中的小圆点都会加上一个active if($(this).hasClass('active') || lists.is(':animated')){ return; //直接退出点击事件的方法 } //获取被点击的小圆点的自定义属性index的值 var targetIndex = parseInt($(this).children().attr('index')); //定义图片的偏移量 var offset = -790 * (targetIndex - index); play(offset); //更新当前的index index = targetIndex; showButton(); }); $('.container').hover(stop, start); //鼠标移入停止,移出启动 start(); </script> </body> </html>
以上仅仅是闲来无事整理的一个小demo,实际使用中,也可以使用类似 Swiper、Hammer等优秀的插件
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。