jquery无缝图片轮播组件封装

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

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

  }

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

(0)

相关推荐

  • Java中json与javaBean几种互转的讲解

    一.java普通对象和json字符串的互转 java对象---->json 首先创建一个java对象: public class Student { //姓名 private String name; //年龄 private String age; //住址 private String address; public String getName() { return name; } public void setName(String name) { this.name = name; }

  • jQuery.parseJSON()函数详解

    jQuery.parseJSON()函数用于将格式完好的JSON字符串转为与之对应的JavaScript对象. 所谓"格式完好",就是要求指定的字符串必须符合严格的JSON格式,例如:属性名称必须加双引号.字符串值也必须用双引号. 如果传入一个格式不"完好"的JSON字符串将抛出一个JS异常,例如:以下字符串均符合JSON格式,但它们不是格式完好的JSON字符串(因此会抛出异常): // 以下均是字符串值,省略了两侧的引号,以便于展现内容 {id: 1} // id

  • 使用jquery的cookie实现登录页记住用户名和密码的方法

    对于初学者来说,登录页记住用户名和密码的功能是经常会遇到的(通常会用javaee的api去实现),今天为大家介绍在前端页面直接用jquery实现该功能(比传统的方法简单多了),长话短说直接进入正题: 在项目中加入jquery.js和jquery.cookie.js两个依赖文件,并加入对应的页面中如: <script type="text/javascript" src="${BasePath}/static/assets/js/jquery.cookie.js"

  • Jquery遍历筛选数组的几种方法和遍历解析json对象,Map()方法详解以及数组中查询某值是否存在

    1.jquery grep()筛选遍历数组(可以得到反转的数组) // 1.jquery grep()筛选遍历数组(可以得到反转的数组) var array = [1,5,9,3,12,4,48,98,4,75,2,10,11]; var filterArray = $.grep(array,(currentValue) => { return currentValue > 10; }); console.log(`${filterArray}---${filterArray.length}`

  • Jquery实现无缝向上循环滚动列表的特效

    效果呈现 整个列表间隔设定的时间向上移动一个item的高度 html结构: <div class="slide-title"> <span>title1</span> <span>title2</span> <span>title3</span> </div> <div class="slide-container"><!--css设置时,注意高度是显示

  • 在Vue项目中引入JQuery-ui插件的讲解

    安装:  npm install jquery-ui-dist -S 引入: import 'jquery-ui-dist/jquery-ui' 更改配置文件: 1.添加jquery:'jquery' resolve: { extensions: ['.js', '.vue', '.json'], alias: { 'vue$': 'vue/dist/vue.esm.js', '@': resolve('src'), jquery:'jquery', } }, // 添加代码 plugins:

  • jquery的$().each和$.each的区别

    $(selector).each(function(index,element)) 这个函数和之前项目里面用到的遍历数据的函数不是同一个呀(项目里面用到的函  数:$.each(dataresource,function(index,element))),于是,就好好研究了下,果然在JS里面有两个相似的函数,于是也就有了今天的主题:  1.$(selector).each(function(index,element))  2.$.each(dataresource,function(index

  • Node.js Stream ondata触发时机与顺序的探索

    上次写Stream pipe细节时,在源码中发现一段无用逻辑,由此引发了对Stream data事件触发时机与顺序的探索. 无用逻辑 当时研究pipe细节是基于Node.js v8.11.1的源码,其中针对上游的ondata事件处理有如下一段代码: // If the user pushes more data while we're writing to dest then we'll end up // in ondata again. However, we only want to in

  • 在vue项目中使用Jquery-contextmenu插件的步骤讲解

    使用步骤: 1.安装: npm i jquery-contextmenu --save-dev 2.在main.js文件中引包 import Jquery_contextmenu from 'jquery-contextmenu' Vue.use(Jquery_contextmenu) import 'jquery-contextmenu/dist/jquery.contextMenu.css' 注意: 在引入样式时可以点击进去jquery-contextmenu的安装目录中查找对应的css文件

  • Node.js Event Loop各阶段讲解

    Event Loop阶段描述图 timers timer阶段处理setTimeout于setInterval回调,开始处理的时机与poll阶段有关联. pending callbacks 该阶段执行某些系统操作的回调,比如TCP套接字在连接时收到ECONNREFUSED. 网上有一些将该阶段称为I/O callbacks的文章都是过时错误的,具体可以移步Node.js官方库下面的这个issue: #1118. idle, prepare 内部使用,忽略. poll poll是一个核心阶段,等新I

随机推荐