JQuery实现轮播图及其原理
程序员文章站
2023-01-29 10:17:06
源码: 效果图: 原理: 页面结构方面: 将轮播图容器设置成相对定位,宽度设置成图片的宽度;容器中分为四部分:轮播的图片;点击的小按钮;前一张;后一张 样式方面: 轮播图容器为相对定位,宽度/高度设置成图片的宽度/高度,设置overflow为hidden; 容器中的每一部分都设置成绝对定位,放到相应 ......
源码:
<!doctype html> <html> <head> <meta charset="utf-8" name="viewport" content="width=device-width,initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"> <title>jquery轮播图</title> <style> *{ padding:0; margin:0; } .container{ width:600px; height:400px; overflow: hidden; position:relative; margin:0 auto; } .list{ width:3000px; height:400px; position:absolute; } .list>img{ float:left; width:600px; height:400px; } .pointer{ position:absolute; width:100px; bottom:20px; left:250px; } .pointer>span{ cursor:pointer; display:inline-block; width:10px; height:10px; background: #7b7d80; border-radius:50%; border:1px solid #fff; } .pointer .on{ background: #28a4c9; } .arrow{ position:absolute; text-decoration:none; width:40px; height:40px; background: #727d8f; color:#fff; font-weight: bold; line-height:40px; text-align:center; top:180px; display:none; } .arrow:hover{ background: #0f0f0f; } .left{ left:0; } .right{ right:0; } .container:hover .arrow{ display:block; } </style> </head> <body> <div class="container"> <div class="list" style="left:0px;"> <!--<img src="../static/image/photo1.jpg" alt="5"/>--> <img src="../static/image/banner.jpg" alt="1"/> <img src="../static/image/slide1.jpg" alt="2"/> <img src="../static/image/slide1.jpg" alt="3"/> <img src="../static/image/slide1.jpg" alt="4"/> <img src="../static/image/photo1.jpg" alt="5"/> <!--<img src="../static/image/banner.jpg" alt="1"/>--> </div> <div class="pointer"> <span index="1" class="on"></span> <span index="2"></span> <span index="3"></span> <span index="4"></span> <span index="5"></span> </div> <a href="#" class="arrow left">></a> <a href="#" class="arrow right"><</a> </div> <script src="../static/js/jquery-3.2.1.min.js"></script> <script> var imgcount = 5; var index = 1; var intervalid; var buttonspan = $('.pointer')[0].children;//htmlcollection 集合 //自动轮播功能 使用定时器 autonextpage(); function autonextpage(){ intervalid = setinterval(function(){ nextpage(true); },3000); } //当鼠标移入 停止轮播 $('.container').mouseover(function(){ console.log('hah'); clearinterval(intervalid); }); // 当鼠标移出,开始轮播 $('.container').mouseout(function(){ autonextpage(); }); //点击下一页 上一页的功能 $('.left').click(function(){ nextpage(true); }); $('.right').click(function(){ nextpage(false); }); //小圆点的相应功能 事件委托 clickbuttons(); function clickbuttons(){ var length = buttonspan.length; for(var i=0;i<length;i++){ buttonspan[i].onclick = function(){ $(buttonspan[index-1]).removeclass('on'); if($(this).attr('index')==1){ index = 5; }else{ index = $(this).attr('index')-1; } nextpage(true); }; } } function nextpage(next){ var targetleft = 0; //当前的圆点去掉on样式 $(buttonspan[index-1]).removeclass('on'); if(next){//往后走 if(index == 5){//到最后一张,直接跳到第一张 targetleft = 0; index = 1; }else{ index++; targetleft = -600*(index-1); } }else{//往前走 if(index == 1){//在第一张,直接跳到第五张 index = 5; targetleft = -600*(imgcount-1); }else{ index--; targetleft = -600*(index-1); } } $('.list').animate({left:targetleft+'px'}); //更新后的圆点加上样式 $(buttonspan[index-1]).addclass('on'); } </script> </body> </html>
效果图:
原理:
页面结构方面:
- 将轮播图容器设置成相对定位,宽度设置成图片的宽度;容器中分为四部分:轮播的图片;点击的小按钮;前一张;后一张
样式方面:
- 轮播图容器为相对定位,宽度/高度设置成图片的宽度/高度,设置overflow为hidden;
- 容器中的每一部分都设置成绝对定位,放到相应的位置;
- 轮播图片的容器宽度设置成所有图片的宽度和,left开始先设置为0;
- 每张图片宽度一样,都设成左浮动,左右图片都在一行排列,所以轮播图的实质是装有图片的容器的移动,每次移动的距离为一张图片的宽度,这样每次就只显示一张图片;
- 前一张/后一张设置成display为none,当鼠标移入总容器时,再设置成display为block
功能方面:
- 自动轮播为一个定时循环机制setinteval,鼠标移入,循环停止,移除循环继续;
下一篇: 烟哪来的