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

发布时间 - 2026-01-11 02:22:55    点击率:

本文实例为大家分享了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图片轮播

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


# js  # 轮播图  # 插件  # Swiper.js插件超简单实现轮播图  # js实现无缝轮播图插件封装  # 原生JS轮播图插件  # js实现轮播图的完整代码  # 原生js实现轮播图的示例代码  # js实现支持手机滑动切换的轮播图片效果实例  # JS轮播图实现简单代码  # js实现点击左右按钮轮播图片效果实例  # JS实现左右无缝轮播图代码  # js原生轮播图插件制作  # 自己的  # 对其  # 大家分享  # 第一张  # 只对  # 绑定  # 让其  # 具体内容  # 大家多多  # 加载  # 全局变量  # init  # return  # Ajax  # constructor  # prototype  # step  # jsonData  # JavaScript  # li 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 教你用AI润色文章,让你的文字表达更专业  bootstrap日历插件datetimepicker使用方法  Python图片处理进阶教程_Pillow滤镜与图像增强  微信小程序 canvas开发实例及注意事项  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  Laravel如何使用Blade组件和插槽?(Component代码示例)  如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框  详解MySQL数据库的安装与密码配置  Laravel如何配置任务调度?(Cron Job示例)  微信小程序 HTTPS报错整理常见问题及解决方案  Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】  Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】  新三国志曹操传主线渭水交兵攻略  开心动漫网站制作软件下载,十分开心动画为何停播?  公司网站制作价格怎么算,公司办个官网需要多少钱?  教学论文网站制作软件有哪些,写论文用什么软件 ?  Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤  jQuery 常见小例汇总  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  香港服务器租用每月最低只需15元?  装修招标网站设计制作流程,装修招标流程?  千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】  iOS发送验证码倒计时应用  Android中AutoCompleteTextView自动提示  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  如何在万网自助建站中设置域名及备案?  奇安信“盘古石”团队突破 iOS 26.1 提权  如何登录建站主机?访问步骤全解析  phpredis提高消息队列的实时性方法(推荐)  在Oracle关闭情况下如何修改spfile的参数  中山网站制作网页,中山新生登记系统登记流程?  Mybatis 中的insertOrUpdate操作  历史网站制作软件,华为如何找回被删除的网站?  如何在IIS管理器中快速创建并配置网站?  如何获取上海专业网站定制建站电话?  如何用5美元大硬盘VPS安全高效搭建个人网站?  如何快速辨别茅台真假?关键步骤解析  轻松掌握MySQL函数中的last_insert_id()  javascript中的数组方法有哪些_如何利用数组方法简化数据处理  高端智能建站公司优选:品牌定制与SEO优化一站式服务  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法  Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】  如何在IIS中配置站点IP、端口及主机头?  为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】  猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】  javascript事件捕获机制【深入分析IE和DOM中的事件模型】  如何在云主机快速搭建网站站点?  Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件