jquery无缝图片轮播组件封装


Posted in jQuery onNovember 25, 2020

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

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");
  }
  
 }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

jQuery 相关文章推荐
jQuery手风琴的简单制作
May 12 jQuery
jQuery实现web页面樱花坠落的特效
Jun 01 jQuery
jQuery 中msgTips 顶部弹窗效果实现代码
Aug 14 jQuery
使用jQuery实现购物车结算功能
Aug 15 jQuery
jq源码解析之绑在$,jQuery上面的方法(实例讲解)
Oct 13 jQuery
jQuery实现页码跳转式动态数据分页
Dec 31 jQuery
基于jquery trigger函数无法触发a标签的两种解决方法
Jan 06 jQuery
jQuery实现的监听导航滚动置顶状态功能示例
Jul 23 jQuery
jQuery模拟12306城市选择框功能简单实现方法示例
Aug 13 jQuery
jQuery轮播图实例详解
Aug 15 jQuery
Vue项目中使用jquery的简单方法
May 16 jQuery
jQuery操作元素的内容和样式完整实例分析
Jan 10 jQuery
详解如何使用webpack打包多页jquery项目
Feb 01 #jQuery
JQuery中queue方法用法示例
Jan 31 #jQuery
AJAX在JQuery中的应用详解
Jan 30 #jQuery
jQuery访问json文件中数据的方法示例
Jan 28 #jQuery
jQuery实现的网站banner图片无缝轮播效果完整实例
Jan 28 #jQuery
jQuery实现合并表格单元格中相同行操作示例
Jan 28 #jQuery
在Vue项目中引入JQuery-ui插件的讲解
Jan 27 #jQuery
You might like
syphon 虹吸式咖啡冲泡冲煮倒水的得与失
2021/03/03 冲泡冲煮
虚拟主机中对PHP的特殊设置
2006/10/09 PHP
一周让你学会PHP 不错的学习资料
2009/02/06 PHP
PHP判断指定时间段的2个方法
2014/03/14 PHP
两种php给图片加水印的实现代码
2020/04/18 PHP
jQuery 动画基础教程
2008/12/25 Javascript
Jquery节点遍历next与nextAll方法使用示例
2014/07/22 Javascript
javascript中解析四则运算表达式的算法和示例
2014/08/11 Javascript
使用json来定义函数,在里面可以定义多个函数的实现方法
2016/10/28 Javascript
浅谈JavaScript正则表达式-非捕获性分组
2017/03/08 Javascript
从零开始学习Node.js系列教程六:EventEmitter发送和接收事件的方法示例
2017/04/13 Javascript
微信小程序picker组件下拉框选择input输入框的实例
2017/09/20 Javascript
vue封装swiper代码实例解析
2019/10/08 Javascript
在Angular项目使用socket.io实现通信的方法
2021/01/05 Javascript
[01:05:29]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster BO3 第二场 1月24日
2021/03/11 DOTA
Python实现数据库编程方法详解
2015/06/09 Python
Python爬取qq music中的音乐url及批量下载
2017/03/23 Python
rabbitmq(中间消息代理)在python中的使用详解
2017/12/14 Python
Python将多个excel表格合并为一个表格
2021/02/22 Python
使用Django启动命令行及执行脚本的方法
2018/05/29 Python
使用Flask集成bootstrap的方法
2018/07/24 Python
pygame实现俄罗斯方块游戏(AI篇1)
2019/10/29 Python
Flask之pipenv虚拟环境的实现
2019/11/26 Python
关于numpy.where()函数 返回值的解释
2019/12/06 Python
Python爬虫requests库多种用法实例
2020/05/28 Python
基于Python编写一个计算器程序,实现简单的加减乘除和取余二元运算
2020/08/05 Python
编写python代码实现简单抽奖器
2020/10/20 Python
Selenium+BeautifulSoup+json获取Script标签内的json数据
2020/12/07 Python
详解Python爬虫爬取博客园问题列表所有的问题
2021/01/18 Python
关于h5中的fetch方法解读(小结)
2017/11/15 HTML / CSS
俄罗斯EPL钻石珠宝店:ЭПЛ
2019/10/22 全球购物
高中数学教学反思
2014/01/30 职场文书
四年级科学教学反思
2014/02/10 职场文书
美术第二课堂活动总结
2014/07/08 职场文书
python使用torch随机初始化参数
2022/03/22 Python
vue 给数组添加新对象并赋值
2022/04/20 Vue.js