众所周知,轮播图是被广泛的运用的。
轮播图我们在很多的网站上都可以看到,例如淘宝、京东这些网站都很常见。
下面开始我们的轮播之旅:
搭建我们的骨架:
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title></title> 6 </head> 7 <body> 8 9 </body> 10 </html> 11
添加区块:
1 <div class="banner"> 2 <div class="b_main"> 3 <div class="b_m_pic"> 4 <ul> 5 <li> 6 <a> 7 <img src="img/1.png" width="100%" height="100%"/><!--这里的宽高是为了占满盒子--> 8 </a> 9 </li> 10 <li> 11 <a> 12 <img src="img/2.png" width="100%" height="100%"/> 13 </a> 14 </li> 15 <li> 16 <a> 17 <img src="img/3.jpg" width="100%" height="100%"/> 18 </a> 19 </li> 20 <li> 21 <a> 22 <img src="img/4.jpg" width="100%" height="100%"/> 23 </a> 24 </li> 25 <li> 26 <a> 27 <img src="img/5.png" width="100%" height="100%"/> 28 </a> 29 </li> 30 <li> 31 <a> 32 <img src="img/6.png" width="100%" height="100%"/> 33 </a> 34 </li> 35 </ul> 36 </div> 37 </div> 38 <!--小圆点--> 39 <div class="b_list"> 40 <ul> 41 <li class="l_click"></li> 42 <li></li> 43 <li></li> 44 <li></li> 45 <li></li> 46 <li></li> 47 </ul> 48 </div> 49 <div class="b_btn"> 50 <div class="b_left"><</div> 51 <div class="b_right">></div> 52 </div> 53 </div>
css样式:
1 <style> 2 *{margin:0;padding:0} 3 ul li{list-style:none} 4 img{margin: 0} 5 </style> 6 <style> 7 .banner{position: relative;width: 1366px;height: 780px;margin: 100px auto;border: 10px solid #009999;border-radius: 15px} 8 .banner .b_main{position: relative;width: 1366px;height: 780px;} 9 .banner .b_main .b_m_pic{position: relative;width: 1366px;height: 780px;} 10 .b_main .b_m_pic li{position: absolute;width: 1366px;height: 780px;top: 0;left: 0;}/*这里给绝对定位,是为了把li叠在一起*/ 11 </style> 12 <style> 13 /*小圆点的样式*/ 14 .b_list ul{position:absolute;right: 40px;bottom: 30px;}/*这里的ul根据banner定位*/ 15 .b_list ul li{width: 20px;height: 20px;float: left;background: #333;margin-left: 20px;border-radius: 50px; 16 border:2px solid white;} 17 .b_list ul .l_hover,.b_list ul .l_click{border:2px solid #333;background: white} 18 /*两边耳朵的样式*/ 19 .b_btn div{position: absolute;width: 100px;height: 100px;background: rgba(0,0,0,0.7);font-size: 60px;color: white;text-align: center;line-height: 100px;top: 50%;margin-top: -80px;cursor: pointer;} 20 .b_btn .b_left{left:0;border-radius: 50%}/*移到左边*/ 21 .b_btn .b_right{right:0;border-radius: 50%}/*移到右边*/ 22 </style>
接下来是我们的JS代码:
1 var $li = $(".b_list ul li");//获取.b_list里面的所有li,放到$li这个变量里面 2 var len = $li.length-1; 3 var _index = 0;//li的索引 4 var $img = $(".b_main .b_m_pic li");//同上 5 var $btn = $(".b_btn div"); 6 7 var timer = null; 8 9 // alert(typeof timer); timer是一个对象 10 11 $li.hover(function(){ 12 $(this).addClass("l_hover");//指向li添加样式 13 },function(){ 14 $(this).removeClass("l_hover");//指向li删除样式 15 }); 16 17 //点击事件 18 $li.click(function(){ 19 _index = $(this).index(); 20 //获取li的下标,改变样式 21 //$li.eq(_index).addClass("l_click").siblings().removeClass("l_click"); 22 //获取图片的下标,实现淡入淡出 23 //$img.eq(_index).fadeIn().siblings().fadeOut(); 24 play(); 25 }); 26 27 //封装函数 28 function play(){ 29 //获取li的下标,改变样式 30 $li.eq(_index).addClass("l_click").siblings().removeClass("l_click"); 31 //获取图片的下标,实现淡入淡出 32 $img.eq(_index).fadeIn().siblings().fadeOut(); 33 } 34 35 //两边耳朵的点击事件 36 $btn.click(function(){ 37 var index = $(this).index(); 38 if(index) { 39 _index++; 40 if (_index > len) { 41 _index = 0; 42 } 43 play(); 44 }else { 45 _index--; 46 if(_index < 0){ 47 _index = len; 48 } 49 play(); 50 } 51 }); 52 53 //定时轮播 54 function auto(){ 55 //把定时器放进timer这个对象里面 56 timer = setInterval(function(){ 57 _index++; 58 if(_index > len){ 59 _index = 0; 60 } 61 play(); 62 },2000); 63 } 64 auto(); 65 66 //当我移上d_main的时候停止轮播 67 $(".b_main").hover(function(){ 68 clearInterval(timer); 69 },function(){ 70 //移开重新调用播放 71 auto(); 72 }); 73 //当我移上两边耳朵的时候停止轮播 74 $(".b_btn div").hover(function(){ 75 clearInterval(timer); 76 },function(){ 77 //移开重新调用播放 78 auto(); 79 });
下面是我们的效果图:
总结:
1、图片、小圆点、两边的耳朵要使用position:absolute绝对定位,进行叠加。
注:绝对定位要根据父级元素进行定位,父级元素要加上position: relative;
2、根据索引值改变图片,达成切图
注:实现淡入淡出分别是fadeIn和fadeOut两个jq方法
siblings() 方法返回被选元素的所有同级元素。同级元素是共享相同父元素的元素。
3、定时器(实现轮播):
setInterval()是开始播放,clearInterval()是关闭,有始有终嘛~~~~~
定时器有两个参数,第一个是函数方法(可以另写一个方法,写上方法名调用,也可以直接写一个function),第二个是时间