视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
jquery无缝图片轮播组件封装
2020-11-27 22:01:07 责编:小采
文档


图片轮播在我们的前端开发中是非常常见的,下面是自己写的一个图片轮播组件,支持自动轮播,手动轮播,无缝衔接。

dom结构

首先是dom结构,将所有内容放入一个大盒子,应用ul标签存放图片列表,圆点定位图片位置。

<div id="box">
 <ul id="banners">
 <li class="banners-img"><img src="img/DSC_1913.JPG" /></li>
 <li class="banners-img"><img src="img/DSC_1913.JPG" /></li>
 <li class="banners-img"><img src="img/DSC_1913.JPG" /></li>
 <li class="banners-img"><img src="img/DSC_1913.JPG" /></li>
 
 </ul>
 <ul class="num">
 <li class="on"></li>
 </ul>
 <div class="btns btn_l"><</div>
 <div class="btns btn_r">></div>
</div>

下面是盒子样式,这里使用百分比自适应,大盒子使用overflow: hidden;防止图片溢出,将ul宽设置为图片总宽度+1(这里+1后面会有用到)。

 #box{
 width:100%;
 height:40.0em;
 overflow: hidden;
 position: absolute;
}
 #box #banners{
 width:500%;
 position: relative;
}
 #box .banners-img{
 float: left;
 width:20%;
 height:40.0em;
}
 #box .banners-img img{
 width:100%;
 height: 100%;
}
 .num{
 width:10%;
 height:2.0em;
 position: relative;
 top: 82%;
 left: 40%;
 -webkit-transform: rotate(-90deg);
 -ms-transform: rotate(-90deg);
 transform:rotate(-90deg);
}
 .num li{
 width:2.0em;
 height:100%;
 position: relative;
 border-radius: 50%;
 background-color: grey; 
}
 .num .on{
 background-color: black;
}
 
 .btns{
 width:1.0em;
 height:1.0em;
 background-color: rgba(0,0,0,0.5);
 position:relative;
 top:50%;
 color: white;
 font-size: 3.0em;
 text-align: center;
 line-height: 1.0em;
 cursor: pointer;
 display: none;
}
 #box:hover .btns{
 display: block;
}
 .btn_l{
 left: 0;
}
 .btn_r{
 right:0;
}

组件使用jquery编写

function addImg(item,arrSrc){ //添加图片,这里需同时修改样式,读者可自行修改
 for(let i = 0;i<item;i++){
 item[i].attr('src',arrSrc[i]);
 }
 }
 var srcs = ['img/DSC_1913.JPG','img/DSC_1914.JPG','img/DSC_1915.JPG','img/DSC_1916.JPG'];
 addImg($('.banners-img img'),srcs);
 
 var Clone = $("#banners li").first().clone();
 //追加一张图片,轮到最后一张时能够自然过渡,这里初学者需慢慢体会
 $("#banners").append(Clone);
 var Size = $("#banners li").size();
 //alert(Size);
 for(var j=0;j<Size-2;j++){
 $(".num").append("<li></li>");
 }
 
 //获取图片宽度
 var imgWidth = parseInt($("#banners .banners-img").css("width"));
 //因宽度为百分比,窗口大小变化时需重新获取
 window.onresize = function(){
 var newWidth = $("#banners .banners-img").css("width");
 imgWidth = parseInt(newWidth);
 }
 //鼠标移到按钮时轮播
 $(".num li").hover(function(){
 var index = $(this).index();
 i=index;
 $("#box #banners").stop().animate({left:-i*imgWidth},500);
 $("#box .num li").eq(i).addClass("on")
 .siblings().removeClass("on");
 
 })
 //自动轮播
 var t = setInterval(function(){
 i++;
 move();
 },3000);
 //鼠标移入时停止自动轮播
 $("#box").hover(function(){
 clearInterval(t);
 },function(){
 t = setInterval(function(){
 i++;
 move();
 },3000);
 })
 
 //手动轮播
 $("#box .btn_l").click(function(){
 i--;
 move();
 });
 
 $("#box .btn_r").click(function(){
 i++;
 move();
 });
 
 //封装一个运动函数
 // alert(imgWidth);
 function move(){
 if(i==Size){ //当轮播到最后一张时过渡到第一张图片
 $("#box #banners").css({left:0});
 i=1;
 }
 if(i==-1){
 $("#box #banners").css({left:-(Size-1)*imgWidth});
 i=Size-2;
 }
 $("#box #banners").stop().animate({left:-i*imgWidth},500);
 if(i==Size-1){
 $("#box .num li").eq(0).addClass("on")
 .siblings().removeClass("on");
 }else{
 $("#box .num li").eq(i).addClass("on")
 .siblings().removeClass("on");
 }
 
 }

下载本文
显示全文
专题