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 相关文章推荐
Javascript的构造函数和constructor属性
Jan 09 Javascript
解决jQuery动态获取手机屏幕高和宽的问题
May 07 Javascript
让javascript加载速度倍增的方法(解决JS加载速度慢的问题)
Dec 12 Javascript
jquery实现点击label的同时触发文本框点击事件的方法
Jun 05 Javascript
简介AngularJS中$http服务的用法
Feb 06 Javascript
AngularJS入门教程之AngularJS指令
Apr 18 Javascript
Javascript将数字转化成为货币格式字符串
Jun 22 Javascript
AngularJS优雅的自定义指令
Jul 01 Javascript
js实现5秒倒计时重新发送短信功能
Feb 05 Javascript
jQuery插件FusionCharts绘制2D柱状图和折线图的组合图效果示例【附demo源码】
Apr 10 jQuery
微信小程序开发之从相册获取图片 使用相机拍照 本地图片上传
Apr 18 Javascript
浅谈vue中慎用style的scoped属性
Nov 28 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
AJAX for PHP简单表数据查询实例
2007/01/02 PHP
解析PHP中DIRECTORY_SEPARATOR,PATH_SEPARATOR两个常量的作用
2013/06/21 PHP
PHP实现QQ空间自动回复说说的方法
2015/12/02 PHP
php设计模式之单例模式代码
2016/06/11 PHP
Laravel5.* 打印出执行的sql语句的方法
2017/07/24 PHP
在JavaScript中通过URL传递汉字的方法
2007/04/09 Javascript
JavaScript asp.net 获取当前超链接中的文本
2009/04/14 Javascript
深入理解JavaScript系列(13) This? Yes,this!
2012/01/18 Javascript
实现只能输入数字的input不用replace方法
2013/09/12 Javascript
Nodejs爬虫进阶教程之异步并发控制
2016/02/15 NodeJs
Bootstrap按钮下拉菜单组件详解
2016/05/10 Javascript
jQuery实现大图轮播
2017/02/13 Javascript
Angular2监听页面大小变化的解决方法
2017/10/09 Javascript
vue cli升级webapck4总结
2018/04/04 Javascript
在vue-cli项目中使用bootstrap的方法示例
2018/04/21 Javascript
解决jquery有正确返回值但不执行success函数的问题
2018/08/20 jQuery
vue中选项卡点击切换且能滑动切换功能的实现代码
2018/11/25 Javascript
利用JavaScript将Excel转换为JSON示例代码
2019/06/14 Javascript
通过循环优化 JavaScript 程序
2019/06/24 Javascript
jQuery提示框插件SweetAlert用法分析
2019/08/05 jQuery
解决layui表格内文本超出隐藏的问题
2019/09/12 Javascript
小程序如何写动态标签的实现方法
2020/02/05 Javascript
webpack+express实现文件精确缓存的示例代码
2020/06/11 Javascript
状态机的概念和在Python下使用状态机的教程
2015/04/11 Python
Python中函数及默认参数的定义与调用操作实例分析
2017/07/25 Python
pycharm 配置svn的图文教程(手把手教你)
2021/01/15 Python
阿波罗盒子:Apollo Box
2017/08/14 全球购物
美国大码时尚女装购物网站:ELOQUII
2017/12/28 全球购物
Tea Collection官网:一家位于旧金山的童装公司
2020/08/07 全球购物
C#笔试题集合
2013/06/21 面试题
大学生个人求职信范文
2013/09/21 职场文书
人事科岗位职责范本
2014/03/02 职场文书
个人授权委托书样本
2014/09/13 职场文书
张丽莉事迹观后感
2015/06/16 职场文书
MySQL表的增删改查基础教程
2021/04/07 MySQL
CSS几步实现赛博朋克2077风格视觉效果
2021/06/16 HTML / CSS