// 布局要求,必须有一个容器,图片和两个按钮,布局方式自定,小圆点样式固定
// <div class="all">
// <img src="img/bg1.jpg" >
// <img src="img/bg2.jpg" >
// <img src="img/bg3.jpg" >
// <img src="img/bg4.jpg" >
// <img src="img/bg5.jpg" >
// <input type="button" name="" value="<<" />
// <input type="button" name="" value=">>" />
// </div> // 使用方法的参数
// $(".all").banner({
// imgs: $('.all').find('img'), // 必选,轮播的图片
// prev: $('.all').find('input').eq(0), // 必选,上一页按钮
// next: $('.all').find('input').eq(1), // 必选, 下一页按钮
// points: true, // 可选,小圆点,默认true
// autoplay: true, // 可选, 默认为true,自动轮播
// delay: 300, // 可选,默认为3000
// current: 3, // 可选, 默认是第0张图片显示
// duration: 300 // 可选, 默认为300 -- 动画时长
// }); ;(function($){
"use strict";
class Banner{
constructor(ele,obj) {
// 接受一个元素和一个参数对象
var {imgs,prev,next,points,autoplay,delay,current,duration}=obj;
// 处理数据
this.index=(current||1)-1;
this.img=imgs;
this.prev=prev;
this.next=next;
this.points= points===false?false:true;
this.autoplay= autoplay===false?false:true; // 控制动画时长
if(this.autoplay){
this.delay=delay||1000;
}else{
this.delay=1000000000;
}
this.duration=duration||500;
// 在用户有要求的情况下生成小按钮的容器
if(this.points){
ele.append($("<ul class='banner-ul'>"));
} // 样式,减少用户一些使用的繁琐操作
ele.css({
overflow: "hidden"
})
this.img.css({
position: "absolute",
top: 0,
left: "100%"
})
this.img.eq(this.index).css("left",0);
this.next.css("z-index",34);
this.prev.css("z-index",34); this.ul=ele.children("ul.banner-ul");
this.ele=ele; this.init();
// 根据用户需求判定是否自动轮播
if(this.autoplay)
this.time();
}
// 自动轮播功能
time(){
clearInterval(this.tt);
this.tt=setInterval(()=>{
this.kg=true;
this.init2();
},this.delay)
}
init(){
var that=this;
// 为前一张后一张两个按钮添加事件
this.prev.on("click",function(){
that.kg=false;
that.init2();
});
this.next.on("click",function(){
that.kg=true;
that.init2();
});
// 需要小圆点的情况下生成小圆点
if(this.points){
for(var i=0;i<this.img.length;i++){
this.ul.append($("<li>"));
}
this.li=this.ul.children("li"); // 添加样式
this.ul.css({
position: "absolute",
left:"43%",
display: "flex",
width: "14%",
"justify-content": "space-around",
bottom: "10px",
padding: 0,
})
this.li.css({
display: "block",
width: "40px",
height: "3px",
"z-index":30
})
// 给当前和其他添加样式
this.li.eq(this.index).css("background","red");
this.li.eq(this.index).siblings().css("background","#0ff");
this.init1();
}
}
init1(){
var that=this;
// 给每个小圆点移入事件,鼠标移入时切换图片
this.ul.on("click","li",function(){
if(that.index<$(this).index()){
that.qian=that.index;
that.kg=true;
}else if(that.index==$(this).index()){
return 0;
}else{
that.hou=that.index;
that.kg=false;
}
that.index=$(this).index();
that.move();
});
}
init2(){
// 计算索引
if(this.kg)
if(this.index==this.img.length-1)
{this.index=0;
this.qian=this.img.length-1;}
else
{this.index++;
this.qian=this.index-1}
else
if(this.index==0)
{this.index=this.img.length-1;
this.hou=0;}
else
{this.index--;
this.hou=this.index+1}
this.move();
}
move(){
clearInterval(this.tt);
if(this.points){
// 清理其他小圆点特殊样式
for(var j=0;j<this.li.length;j++)
this.li.eq(j).css("background","#00FFFF");
// 给当前小圆点加特殊样式
this.li.eq(this.index).css("background","red");
}
var w=parseInt(this.img.eq(1).width());
// 动画,轮播图的图片的具体效果
if(this.kg){
this.img.eq(this.qian).css("left",0).stop().animate({left:-1*w},this.duration);
this.img.eq(this.index).css("left",w+"px").stop().animate({left:0},this.duration);
}else{
this.img.eq(this.hou).css("left",0).stop().animate({left:w},this.duration);
this.img.eq(this.index).css("left",-1*w+"px").stop().animate({left:0},this.duration);
}
// 结尾时将清理掉的计时器重新绑定
if(this.autoplay)
clearInterval(this.tt);
this.tt=setInterval(()=>{
this.kg=true;
this.init2();
},this.delay)
}
}
// 绑定banner方法
$.fn.extend({
banner (obj) {
new Banner(this,obj);
}
});
})(jQuery);

jQuery封装轮播图插件的更多相关文章

  1. jquery, js轮播图插件Swiper3

    轮播图插件Swiper3 HTML代码 如果只是简单的使用轮播图,直接复制我的html代码就可以. 如果想要高级一些,就自己去看文档吧 <!DOCTYPE html> <html l ...

  2. 封装一个简单的原生js焦点轮播图插件

    轮播图实现的效果为,鼠标移入左右箭头会出现,可以点击切换图片,下面的小圆点会跟随,可以循环播放(为了方便理解,没有补2张图做无缝轮播).本篇文章的主要目的是分享封装插件的思路. 轮播图我一开始是写成非 ...

  3. jquery的fadeTo方法的淡入淡出轮播图插件

    由于对基于jquery的简单插件开发有了一定的了解,慢慢的也对基于jquery的插件开发有了兴趣,在上班结束之后就研究各种插件的思路逻辑.最近开发了一款基于jquery的fadeTo方法的轮播图插件, ...

  4. 原生JS面向对象思想封装轮播图组件

    原生JS面向对象思想封装轮播图组件 在前端页面开发过程中,页面中的轮播图特效很常见,因此我就想封装一个自己的原生JS的轮播图组件.有了这个需求就开始着手准备了,代码当然是以简洁为目标,轮播图的各个功能 ...

  5. 学习笔记: js插件 —— SuperSlide 2 (轮播图插件,PC用)

    SuperSlide 2  轮播图插件,较老.但还好用. 适用于PC,是绑定到jquery上的方法: $.slide(); 如果在实际中找不到.slide方法,请检查jquery等.js文件的引入次序 ...

  6. 原生js写一个无缝轮播图插件(支持vue)

    轮播图插件(Broadcast.js) 前言:写这个插件的原因 前段时间准备用vue加上网易云的nodejs接口,模拟网易云音乐移动端.因为想自己写一遍所有的代码以及加固自己的flex布局,所以没有使 ...

  7. 图片轮播图插件的使用 unslider!!!

    1.百度图片轮播图unslider,第一个就会出现jquery unslider轮播图,点击进去,下载网站提供的文件,解压,内部有我们需要使用的各种js,图片等. 2.在自己的eclipse或者int ...

  8. 用jQuery实现轮播图效果,js中的排他思想

    ---恢复内容开始--- jQuery实现轮播图不用单独加载. 思路: a. 通过$("#id名");选择需要的一类标签,获得一个伪数组 b.由于是伪数组的原因,而对数组的处理最多 ...

  9. 第124天:移动web端-Bootstrap轮播图插件使用

    Bootstrap JS插件使用 > 对于Bootstrap的JS插件,我们只需要将文档实例中的代码粘到我们自己的代码中> 然后作出相应的样式调整 Bootstrap中轮播图插件叫作Car ...

随机推荐

  1. rpm2cpio - 从 RPM 软件包中提取 cpio 归档

    SYNOPSIS rpm2cpio [filename] DESCRIPTION rpm2cpio 将指定的一个 .rpm 文件转换为一个 cpio 文档,输出到标准输出.如果给出了 `-' 参数,那 ...

  2. jmeter 参数化5_Count 计数器

    如果需要引用的数据量较大,且要求不能重复或者需要自增,那么可以使用计数器来实现. 计数器(counter):允许用户创建一个在线程组之内都可以被引用的计数器. 计数器允许用户配置一个起点,一个最大值, ...

  3. js 中HTML的 onkeycode 和onkeydown属性事件

    <!DOCTYPE html><html><head><script>function displayResult(){var x=document.g ...

  4. 【leetcode】1014. Capacity To Ship Packages Within D Days

    题目如下: A conveyor belt has packages that must be shipped from one port to another within D days. The  ...

  5. Vue学习笔记-作用域插槽

    有时候我们希望子组件的内容由父组件决定如何展示,这个时候子组件的数据父组件并不能访问到,而作用域插槽的关键之处就在于,父组件能接收来自子组件的slot传递过来的参数. <div id=" ...

  6. 每天一个linux命令:less(14)

    less less命令的作用与more十分相似,都可以用来浏览文字档案的内容,less 在查看之前不会加载整个文件 .用less命令显示文件时,用PageUp键向上翻页,用PageDown键向下翻页. ...

  7. [CF852H]Bob and stages

    题意:给出平面上\(n\)个点,要求选出\(k\)个点,使得这些点形成一个凸包,且凸包内部没有点,求最大面积.无解输出\(0\). 题解:枚举凸包最左的点\(p\),删除所有在\(p\)左边的点,然后 ...

  8. [LightOJ1070]Algebraic Problem

    题目:Algebraic Problem 链接:https://vjudge.net/problem/LightOJ-1070 分析: 1)$ a^n+b^n = ( a^{n-1}+b^{n-1} ...

  9. (转)Docker 网络

    转:https://www.cnblogs.com/allcloud/p/7150564.html 本系列文章将介绍 Docker的相关知识: (1)Docker 安装及基本用法 (2)Docker ...

  10. meta标签 使用说明(http-equiv、refresh、seo)

    meta标签 使用说明(http-equiv.refresh.seo) meta标签,是在head标签里面,一般用做页面描述的.它的内容,用来描述页面一些信息的,如类型.编码.作者.简介等!虽然,它不 ...