// js 封装插件
// 给浏览器使用(前端)window
// 给nodejs 服务端使用的(后端)
// 自执行函数
// 自执行函数,形成局部作用域
(function (win) {
var defaultSetting = {
time: 3,
containerClassName: '.container',
NavigationClassName: '.navigation',
next: '.next',
previous: '.prev',
autoPlay: false,
data: [],
imgWidth: 0
}
// es5 构造函数
// 主要做 变量的保存和校验
function LunBo(setting) {
defaultSetting.time = setting.time || defaultSetting.time
defaultSetting.containerClassName = setting.containerClassName || defaultSetting.containerClassName
defaultSetting.NavigationClassName = setting.NavigationClassName || defaultSetting.NavigationClassName
defaultSetting.next = setting.next || defaultSetting.next
defaultSetting.previous = setting.previous || defaultSetting.previous
defaultSetting.autoPlay = setting.autoPlay || defaultSetting.autoPlay
defaultSetting.data = setting.data || defaultSetting.data
if ( defaultSetting.data.length == 0 || (document.querySelector(defaultSetting.containerClassName) == null ||
document.querySelector(defaultSetting.NavigationClassName) == null||
document.querySelector(defaultSetting.next) == null||
document.querySelector(defaultSetting.previous) == null)) {
console.error("类名不存在或data数据源为空,请仔细检查")
} else {
this.init()
}
}
LunBo.prototype = {
init() {
this.RenderContainer()
this.RenderNavigation()
this.BindPreviousClick()
this.BindNextClick()
setTimeout(() => defaultSetting.imgWidth = document.querySelector("img").width, 300)
},
// 渲染 轮播图的数据到页面
RenderContainer() {
// var ddd = this;
defaultSetting.data.forEach((val,index) => {
this.$(defaultSetting.containerClassName).innerHTML +=
`
`
});
},
// 渲染小圆点
RenderNavigation() {
defaultSetting.data.forEach((val,index) => {
this.$(defaultSetting.NavigationClassName).innerHTML +=
`
`
});
this.BindYdClick()
},
changeActiveYd() {
var index = Math.abs(parseInt(this.$(defaultSetting.containerClassName).style.left)) / defaultSetting.imgWidth;
var LiArr = document.querySelectorAll(`${defaultSetting.NavigationClassName} li`);
LiArr.forEach(function(val){
val.className = ""
})
LiArr[index].className = "active"
},
// 小圆点绑定事件
BindYdClick() {
var LiArr = document.querySelectorAll(`${defaultSetting.NavigationClassName} li`);
LiArr.forEach((val,index) => {
val.onclick = () => {
LiArr.forEach(function(v){
v.className = ""
})
val.className = "active"
this.$(defaultSetting.containerClassName).style.left = `${index * -defaultSetting.imgWidth}px`;
}
})
},
// 右侧下一页数
BindPreviousClick() {
this.$(defaultSetting.previous).onclick = () => {
this.OffSetDistance(-defaultSetting.imgWidth)
this.changeActiveYd()
}
},
// 左侧上一页
BindNextClick() {
this.$(defaultSetting.next).onclick = () => {
this.OffSetDistance(defaultSetting.imgWidth)
this.changeActiveYd()
}
},
OffSetDistance(nums) {
var Offset = parseInt(this.$(defaultSetting.containerClassName).style.left) + nums;
// console.log("Offset: ", Offset)
var maxWidth = defaultSetting.imgWidth * (defaultSetting.data.length - 1);
// console.log("maxWidth: ", maxWidth)
this.$(defaultSetting.containerClassName).style.left = `${Offset}px`
if (Offset < -maxWidth ) {
this.$(defaultSetting.containerClassName).style.left = "0px";
}
if (Offset > 0) {
this.$(defaultSetting.containerClassName).style.left = `-${maxWidth}px`;
}
},
$(calssName) {
return document.querySelector(calssName)
}
}
win.Swiper = LunBo
})(window)
// es6 语法糖
// js代码转换工具 babel
// class Lunbo {
// constructor(setting) {
// this.init()
// }
// init () {
// }
// }
// function init() {
// }
// var ddd = new Lunbo({
// id: 3
// });
// ddd.init()