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实现tab选项卡切换效果(悬停、下方横线动画位移)
May 05 jQuery
jquery网页加载进度条的实现
Jun 01 jQuery
jQuery操作DOM_动力节点Java学院整理
Jul 04 jQuery
jquery拖动改变div大小
Jul 04 jQuery
JQuery实现table中tr上移下移的示例(超简单)
Jan 08 jQuery
集成vue到jquery/bootstrap项目的方法
Feb 10 jQuery
jQuery实现获取选中复选框的值实例详解
Jun 28 jQuery
JQuery中queue方法用法示例
Jan 31 jQuery
jquery实现垂直无限轮播的方法分析
Jul 16 jQuery
详解jQuery中的prop()使用方法
Jan 05 jQuery
使用jQuery实现购物车
Oct 29 jQuery
jQuery实现鼠标拖动图片功能
Mar 04 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 ci框架中加载css和js文件失败的解决方法
2014/03/03 PHP
PHP获取浏览器信息类和客户端地理位置的2个方法
2014/04/24 PHP
php根据日期或时间戳获取星座信息和生肖等信息
2015/10/20 PHP
php版微信开发Token验证失败或请求URL超时问题的解决方法
2016/09/23 PHP
php 使用fopen函数创建、打开文件详解及实例代码
2016/09/24 PHP
PHP实现从PostgreSQL数据库检索数据分页显示及根据条件查找数据示例
2018/06/09 PHP
javascript的trim,ltrim,rtrim自定义函数
2008/09/21 Javascript
页面加载完成后再执行JS的jquery写法以及区别说明
2014/02/22 Javascript
JavaScript的原型继承详解
2015/02/15 Javascript
基于javascript html5实现3D翻书特效
2016/03/14 Javascript
JS组件Bootstrap导航条使用方法详解
2016/04/29 Javascript
浅谈js停止事件冒泡 阻止浏览器的默认行为(阻止超连接 #)
2017/02/08 Javascript
vue-cli webpack 开发环境跨域详解
2017/05/18 Javascript
微信小程序开发之toast等弹框提示使用教程
2017/06/08 Javascript
js 客户端打印html 并且去掉页眉、页脚的实例
2017/11/03 Javascript
基于jquery trigger函数无法触发a标签的两种解决方法
2018/01/06 jQuery
Vuex 进阶之模块化组织详解
2018/01/12 Javascript
Vue全局分页组件的实现代码
2018/08/10 Javascript
vue动态绘制四分之三圆环图效果
2019/09/03 Javascript
JavaScript Dom 绑定事件操作实例详解
2019/10/02 Javascript
js实现简单的日历显示效果函数示例
2019/11/25 Javascript
JS实现移动端可折叠导航菜单(现代都市风)
2020/07/07 Javascript
vue监听滚动事件的方法
2020/12/21 Vue.js
使用python调用浏览器并打开一个网址的例子
2014/06/05 Python
Python异常处理操作实例详解
2018/08/28 Python
Python爬虫 bilibili视频弹幕提取过程详解
2019/07/31 Python
pandas 像SQL一样使用WHERE IN查询条件说明
2020/06/05 Python
Python操控mysql批量插入数据的实现方法
2020/10/27 Python
苏格兰销售女装、男装和童装的连锁店:M&Co
2018/03/16 全球购物
英国珠宝和手表专家:Pleasance & Harper
2020/10/21 全球购物
护理专科毕业推荐信
2013/11/10 职场文书
酒店七夕情人节活动策划方案
2014/08/24 职场文书
先进党支部申报材料
2014/12/24 职场文书
2015年国庆节标语大全
2015/07/30 职场文书
MySQL COUNT函数的使用与优化
2021/05/10 MySQL
详解Redis复制原理
2021/06/04 Redis