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中animate()的使用方法及解决$(”body“).animate({“scrollTop”:top})不被Firefox支持的问题
Apr 04 jQuery
JS/jquery实现一个网页内同时调用多个倒计时的方法
Apr 27 jQuery
Spring shiro + bootstrap + jquery.validate 实现登录、注册功能
Jun 02 jQuery
jQuery EasyUI Layout实现tabs标签的实例
Sep 26 jQuery
jQuery选择器之属性过滤选择器详解
Sep 28 jQuery
jQuery使用bind函数实现绑定多个事件的方法
Oct 11 jQuery
jquery 获取索引值在一定范围的列表方法
Jan 25 jQuery
jQuery AJAX 方法success()后台传来的4种数据详解
Aug 08 jQuery
jQuery选择器之基本选择器用法实例分析
Feb 19 jQuery
JQuery常见节点操作实例分析
May 15 jQuery
jquery ajax 请求小技巧实例分析
Nov 11 jQuery
jQuery实现手风琴效果(蒙版)
Jan 11 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递归算法的详细示例分析
2013/02/19 PHP
php实现的css文件背景图片下载器代码
2014/11/11 PHP
php动态绑定变量的用法
2015/06/16 PHP
PHP开发api接口安全验证操作实例详解
2020/03/26 PHP
javascript hashtable实现代码
2009/10/13 Javascript
纯JAVASCRIPT图表动画插件Highcharts Examples
2011/04/16 Javascript
js 金额文本框实现代码
2012/02/14 Javascript
利用jQuery实现可以编辑的表格
2014/05/26 Javascript
JQuery中$.each 和$(selector).each()的区别详解
2015/03/13 Javascript
ECMA5数组的新增方法有哪些及forEach()模仿实现
2015/11/03 Javascript
Jquery 效果使用详解
2015/11/23 Javascript
Bootstrap实现input控件失去焦点时验证
2016/08/04 Javascript
HTML5 JS压缩图片并获取图片BASE64编码上传
2020/11/16 Javascript
vue绑定class与行间样式style详解
2017/08/16 Javascript
Vue ElementUI之Form表单验证遇到的问题
2017/08/21 Javascript
原生JS封装animate运动框架的实例
2017/10/12 Javascript
vue-cli3.0 特性解读
2018/04/22 Javascript
js中的this的指向问题详解
2019/08/29 Javascript
vue中实现图片压缩 file文件的方法
2020/05/28 Javascript
[01:56]生活中的妖精之七夕特别档
2016/08/09 DOTA
Django中几种重定向方法
2015/04/28 Python
python清理子进程机制剖析
2017/11/23 Python
python super用法及原理详解
2020/01/20 Python
打印tensorflow恢复模型中所有变量与操作节点方式
2020/05/26 Python
Selenium alert 弹窗处理的示例代码
2020/08/06 Python
python将数据插入数据库的代码分享
2020/08/16 Python
Elasticsearch py客户端库安装及使用方法解析
2020/09/14 Python
茱莉蔻美国官网:Jurlique美国
2020/11/24 全球购物
学校食堂采购员岗位职责
2013/12/05 职场文书
高三生物教学反思
2014/01/25 职场文书
优秀的2014年两会精神解读
2014/03/17 职场文书
物流管理专业毕业生求职信
2014/03/23 职场文书
教师一岗双责责任书
2014/04/16 职场文书
爱国口号
2014/06/19 职场文书
小学假期安全广播稿
2014/09/28 职场文书
2015年七一建党节活动方案
2015/05/05 职场文书