js轮播图的插件化封装详解


Posted in Javascript onJuly 17, 2017

本文实例为大家分享了js轮播图的插件化封装代码,供大家参考,具体内容如下

具体代码如下:

~function(){
 function AutoBanner(curEleId,ajaxURL,interval){
  //把之前存储获取元素的变量都作为当前实例的私有属性
  this.banner = document.getElementById(curEleId);
  this.bannerInner = utils.firstChild(this.banner);
  this.bannerTip = utils.children(this.banner,"ul")[0];
  this.bannerLink = utils.children(this.banner,'a');
  this.bannerLeft = this.bannerLink[0];
  this.bannerRight = this.bannerLink[1];
  this.divList = this.bannerInner.getElementsByTagName('div');
  this.imgList = this.bannerInner.getElementsByTagName('img');
  this.oLis = this.bannerTip.getElementsByTagName('li');

  //之前的全局变量也应该变为自己的私有属性
  this.jsonData = null;
  this.interval = interval || 3000;
  this.autoTimer = null;
  this.step = 0;
  this.ajaxURL = ajaxURL;
  //返回当前实例
  return this.init();
 }

 AutoBanner.prototype = {
  constructor:AutoBanner,
  //Ajax请求数据
  getData:function(){
   var _this = this;
   var xhr = new XMLHttpRequest;
   xhr.open("get",this.ajaxURL + "?_="+Math.random(),false);
   xhr.onreadystatechange = function(){
    if(xhr.readyState ===4 && /^2\d{2}$/.test(xhr.status)){
     _this.jsonData = utils.formatJSON(xhr.responseText)
    }
   }
   xhr.send(null)
  },
  //实现数据绑定
  bindData:function(){
   var str = "",str2 = "";
   if(this.jsonData){
    for(var i = 0,len=this.jsonData.length;i<len;i++){
     var curData = this.jsonData[i];
     str+='<div><img src="" alt="" trueImg="'+curData['img']+'"></div>';
     i===0?str2+="<li class='bg'></li>":str2+="<li></li>"
    }
   }
   this.bannerInner.innerHTMl = str;
   this.bannerTip.innerHTML = str2;
  },
  //延迟加载
  lazyImg:function(){
   var _this = this;
   for(var i = 0,len = this.imgList.length;i<len;i++){
    ~function(i){
     var curImg = _this.imgList[i];
     var oImg = new Image;
     oImg.src = curImg.getAttribute('trueImg');
     oImg.onload = function(){
      curImg.src = this.src;
      curImg.style.display = block;
      //只对第一张处理
      if(i===0){
       var curDiv = curImg.parentNode;
       curDiv.style.zIndex = 1;
       myAnimate(curDiv,{opacity:1},200);
      }
      oImg = null;
     }
    }(i)
   }
  },
  //自动轮播
  autoMove:function(){
   if(this.step === this.jsonData.length-1){
    this.step = -1
   }
   this.step++;
   this.setBanner();
  },
  //切换效果和焦点对齐
  setBanner:function(){
   for(var i = 0,len = this.divList.length;i<len;i++){
    var curDiv = this.divList[i];
    if(i===this.step){
     utils.css(curDiv,"zIndex",1)
     //2、让当前的透明度从0变为1,当动画结束,我们需要让其他的div的透明度的值直接变为0
     myAnimate(curDiv,{opacity:1},200,function(){
      var curDivSib = utils.siblings(this);
      for(var k = 0,len = curDivSib.length;k<len;k++){
       utils.css(curDivSib[k],'opacity',0)
      }

     })
     continue
    }
    utils.css(curDiv,"zIndex",0)
   }
   //实现焦点对其
   for(i = 0,len = this.oLis.length;i<len;i++){
    var curLi = this.oLis[i];
    i === this.step?utils.addClass(curLi,"bg"):utils.removeClass(curLi,"bg");
   }
  },
  //控制自动轮播
  mouseEvent:function(){
   var _this = this;
   this.banner.onmouseover = function(){
    window.clearInterval(_this.autoTimer);
    _this.bannerLeft.style.display = _this.bannerRight.style.display = "block"

   }
   this.banner.onmouseout = function(){
    _this.autoTimer = window.setInterval(function(){
     _this.autoMove.call(_this)
    },_this.interval);
    _this.bannerLeft.style.display = _this.bannerRight.style.display = "none"
   }
  },
  //实现焦点切换
  tipEvent:function(){
   var _this = this;
   for(var i = 0,len = this.oLis.length;i<len;i++){
    var curLi = this.oLis[i];
    curLi.index = i;
    curLi.onclick = function(){
     _this.step = this.index;
     _this.setBanner();
    }
   }
  },
  //实现左右切换
  leftRight:function(){
   var _this = this;
   this.bannerRight.onclick = function(){
    _this.autoMove();
   };
   this.bannerLeft.onclick = function(){
    if(_this.step === 0){
     _this.step = _this.jsonData.length;
    }
    _this.step--;
    _this.setBanner();
   }
  },
  //当前插件的唯一入口 命令模式:init相当于指挥室,指挥各军队协同作战
  init:function(){
   var _this = this;
   this.getData();
   this.bindData();
   window.setTimeout(function(){
    _this.lazyImg();
   },500);
   this.autoTimer = window.setInterval(function(){
    _this.autoMove();
   },this.interval);

   this.mouseEvent();
   this.tipEvent();
   this.leftRight();
   return this;
  }

 }

 window.AutoBanner = AutoBanner
}()

//使用
var banner1 = new AutoBanner('banner','json/banner.txt',1000)

精彩专题分享:jQuery图片轮播 JavaScript图片轮播 Bootstrap图片轮播

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

Javascript 相关文章推荐
js特殊字符过滤的示例代码
Mar 05 Javascript
jQuery下拉友情链接美化效果代码分享
Aug 26 Javascript
jQuery CSS3相结合实现时钟插件
Jan 08 Javascript
JS判断输入的字符串是否是数字的方法(正则表达式)
Nov 29 Javascript
JS库之Particles.js中文开发手册及参数详解
Sep 13 Javascript
原生JS写Ajax的请求函数功能
Dec 22 Javascript
VUE DOM加载后执行自定义事件的方法
Sep 07 Javascript
小程序实现左滑删除功能
Oct 30 Javascript
jquery获取img的src值实例介绍
Jan 16 jQuery
Vue中JS动画与Velocity.js的结合使用
Feb 13 Javascript
如何通过javaScript去除字符串两端的空白字符
Feb 06 Javascript
原生js实现弹幕效果
Nov 29 Javascript
Vue.js中extend选项和delimiters选项的比较
Jul 17 #Javascript
Vue.js中组件中的slot实例详解
Jul 17 #Javascript
Vue.js上下滚动加载组件的实例代码
Jul 17 #Javascript
JS实现仿UC浏览器前进后退效果的实例代码
Jul 17 #Javascript
详解利用jsx写vue组件的方法示例
Jul 17 #Javascript
Javascript实现找不同色块的游戏
Jul 17 #Javascript
Vue.js 单页面多路由区域操作的实例详解
Jul 17 #Javascript
You might like
php Undefined index和Undefined variable的解决方法
2008/03/27 PHP
PHP中PDO的错误处理
2011/09/04 PHP
php打开文件fopen函数的使用说明
2013/07/05 PHP
PHP中empty和isset对于参数结构的判断及empty()和isset()的区别
2015/11/15 PHP
PHP设计模式之迭代器模式
2016/06/17 PHP
jQuery Ajax方法调用 Asp.Net WebService 的详细实例代码
2011/04/27 Javascript
使用Grunt.js管理你项目的应用说明
2013/04/24 Javascript
js自动下载文件到本地的实现代码
2013/04/28 Javascript
在NodeJS中启用ECMAScript 6小结(windos以及Linux)
2014/07/15 NodeJs
IE中鼠标经过option触发mouseout的解决方法
2015/01/29 Javascript
jquery仅用6行代码实现滑动门效果
2015/09/07 Javascript
详解Javascript函数声明与递归调用
2016/10/22 Javascript
Kendo Grid editing 自定义验证报错提示的解决方法
2016/11/18 Javascript
JS中的作用域链
2017/03/01 Javascript
jQuery动态追加页面数据以及事件委托详解
2017/05/06 jQuery
详解如何提高 webpack 构建 Vue 项目的速度
2017/07/03 Javascript
简述jQuery Easyui一些用法
2017/08/01 jQuery
jQuery发请求传输中文参数乱码问题的解决方案
2018/05/22 jQuery
JavaScript笛卡尔积超简单实现算法示例
2018/07/30 Javascript
JavaScript格式化json和xml的方法示例
2019/01/22 Javascript
微信小程序 组件的外部样式externalClasses使用详解
2019/09/06 Javascript
python基础教程之python消息摘要算法使用示例
2014/02/10 Python
Python实现爬取知乎神回复简单爬虫代码分享
2015/01/04 Python
在Python的Flask框架中验证注册用户的Email的方法
2015/09/02 Python
python 批量解压压缩文件的实例代码
2019/06/27 Python
Python简单处理坐标排序问题示例
2019/07/11 Python
使用virtualenv创建Python环境及PyQT5环境配置的方法
2019/09/10 Python
python开发实例之python使用Websocket库开发简单聊天工具实例详解(python+Websocket+JS)
2020/03/18 Python
Django项目uwsgi+Nginx保姆级部署教程实现
2020/04/19 Python
在Ubuntu 20.04中安装Pycharm 2020.1的图文教程
2020/04/30 Python
简单介绍一下pyinstaller打包以及安全性的实现
2020/06/02 Python
html2canvas截图空白问题的解决
2020/03/24 HTML / CSS
REISS美国官网:伦敦最受欢迎的时尚品牌
2019/08/16 全球购物
Hobbs官方网站:英国奢华女性时尚服装
2020/02/22 全球购物
小学生民族团结演讲稿
2014/08/27 职场文书
python文件名批量重命名脚本实例代码
2021/04/22 Python