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和ajax代替iframe的方法(详解)
Apr 12 jQuery
jQuery实现动态给table赋值的方法示例
Jul 04 jQuery
jQuery实现可编辑表格并生成json结果(实例代码)
Jul 19 jQuery
jQuery模拟爆炸倒计时功能实例代码
Aug 21 jQuery
jQuery响应滚动条事件功能示例
Oct 14 jQuery
jQuery选择器之基本过滤选择器用法实例分析
Feb 19 jQuery
jQuery实现每日秒杀商品倒计时功能
Sep 06 jQuery
JQuery常用简单动画操作方法回顾与总结
Dec 07 jQuery
jQuery 选择器用法基础入门示例
Jan 04 jQuery
用jQuery实现抽奖程序
Apr 12 jQuery
JQuery插件tablesorter表格排序实现过程解析
May 28 jQuery
jquery插件实现悬浮的菜单
Apr 24 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
php socket客户端及服务器端应用实例
2014/07/04 PHP
thinkphp框架下实现登录、注册、找回密码功能
2016/04/06 PHP
Mac下php 5升级到php 7的步骤详解
2017/04/26 PHP
php设计模式之工厂模式用法经典实例分析
2019/09/20 PHP
深入理解javascript动态插入技术
2013/11/12 Javascript
js插件方式打开pdf文件(浏览器pdf插件分享)
2013/12/20 Javascript
JS判断浏览器是否支持某一个CSS3属性的方法
2014/10/17 Javascript
学习JavaScript设计模式之享元模式
2016/01/18 Javascript
实例讲解JavaScript中的this指向错误解决方法
2016/06/13 Javascript
js 获取经纬度的实现方法
2016/06/20 Javascript
Jquery Easyui日历组件Calender使用详解(23)
2016/12/18 Javascript
浅谈javascript中的事件冒泡和事件捕获
2016/12/28 Javascript
AngularJS中update两次出现$promise属性无法识别的解决方法
2017/01/05 Javascript
完美解决input[type=number]无法显示非数字字符的问题
2017/02/28 Javascript
Element-UI Table组件上添加列拖拽效果实现方法
2018/04/14 Javascript
微信小程序实现之手势锁功能实例代码
2018/07/19 Javascript
Python实现针对含中文字符串的截取功能示例
2017/09/22 Python
Python 2/3下处理cjk编码的zip文件的方法
2019/04/26 Python
python实现windows倒计时锁屏功能
2019/07/30 Python
python实现人工智能Ai抠图功能
2019/09/05 Python
Python计算机视觉里的IOU计算实例
2020/01/17 Python
Python标准库itertools的使用方法
2020/01/17 Python
python不使用for计算两组、多个矩形两两间的iou方式
2020/01/18 Python
pytorch masked_fill报错的解决
2020/02/18 Python
深度学习入门之Pytorch 数据增强的实现
2020/02/26 Python
python对execl 处理操作代码
2020/06/22 Python
Python如何解除一个装饰器
2020/08/07 Python
html2 canvas生成清晰的图片实现打印功能
2019/09/23 HTML / CSS
英国电视和家用电器购物网站:rlrdistribution.co.uk
2018/11/20 全球购物
幼儿园教研活动方案
2014/01/19 职场文书
新郎答谢词
2015/01/04 职场文书
同学聚会感言一句话
2015/07/30 职场文书
Java多条件判断场景中规则执行器的设计
2021/06/26 Java/Android
用 Python 定义 Schema 并生成 Parquet 文件详情
2021/09/25 Python
Python帮你解决手机qq微信内存占用太多问题
2022/02/15 Python
JavaScript展开运算符和剩余运算符的区别详解
2022/02/18 Javascript