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 】
相关推荐:
标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
Laravel路由Route怎么设置_Laravel基础路由定义与参数传递规则【详解】
如何在自有机房高效搭建专业网站?
HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】
Laravel怎么在Controller之外的地方验证数据
Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程
Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中
Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑
详解jQuery停止动画——stop()方法的使用
中国移动官方网站首页入口 中国移动官网网页登录
Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权
Laravel如何与Inertia.js和Vue/React构建现代单页应用
Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置
如何为不同团队 ID 动态生成多个非值班状态按钮
Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件
如何基于云服务器快速搭建个人网站?
Laravel怎么使用Intervention Image库处理图片上传和缩放
微信小程序 scroll-view组件实现列表页实例代码
Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能
Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道
如何在新浪SAE免费搭建个人博客?
VIVO手机上del键无效OnKeyListener不响应的原因及解决方法
如何快速搭建高效可靠的建站解决方案?
如何在宝塔面板创建新站点?
Linux系统命令中tree命令详解
如何用狗爹虚拟主机快速搭建网站?
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
Laravel如何实现文件上传和存储?(本地与S3配置)
如何生成腾讯云建站专用兑换码?
在线制作视频的网站有哪些,电脑如何制作视频短片?
如何快速生成高效建站系统源代码?
Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全
北京企业网站设计制作公司,北京铁路集团官方网站?
Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】
如何彻底卸载建站之星软件?
浅述节点的创建及常见功能的实现
Laravel如何与Docker(Sail)协同开发?(环境搭建教程)
深圳网站制作培训,深圳哪些招聘网站比较好?
Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布
Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】
Python3.6正式版新特性预览
uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址
JavaScript如何实现倒计时_时间函数如何精确控制
如何破解联通资金短缺导致的基站建设难题?
JavaScript数据类型有哪些_如何准确判断一个变量的类型
猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】
消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工
Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】
为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】

