class Swiper { defaultOption = { TimeId: null, autoPlay: false, time: 1000, initialSlide: 0, // 实现了 el: '.swiper', on: {}, length: () => this._f(`.swiper_wrap li`).length, width: () => this.$f(``).offsetWidth, initSlideLeft: () => { this.$f(".swiper_wrap").style.left = `${this.defaultOption.initialSlide * -this.defaultOption.width() }px` } } // 构造函数里面接受 constructor(el, option) { if (el.length == 0 || this.$(el) == null) { console.error(`类名:${el}不存在,请检查`); } else { this.defaultOption.el = el || this.defaultOption.el; this.defaultOption.autoPlay = option.autoPlay || this.defaultOption.autoPlay; this.defaultOption.time = option.time || this.defaultOption.time; this.defaultOption.initialSlide = option.initialSlide || this.defaultOption.initialSlide; if (option.hasOwnProperty("on")) { this.defaultOption.on = option.on } this.init() } } init() { this.defaultOption.initSlideLeft() if (this.$f(".button") != null) { this.next() this.prev() } this.defaultOption.autoPlay ? this.autoPlay() : '' this.$f(".dot") == null ? '' : this.renderDot() } next() { this.click(".right", (v) => this.sport(1)) } prev() { this.click(".left", v => this.sport(-1)) } changeDotActive(i) { this.defaultOption.on.slideChange && this.defaultOption.on.slideChange(i) if (this.$f(".dot") != null) { this._f(".dot li").forEach(val => val.classList.remove("active")) this._f(".dot li")[i].classList.add("active") } this.$f(".swiper_wrap").style.left = `${i * -this.defaultOption.width()}px` } renderDot() { for (var i = 0; i < this.defaultOption.length(); i++) { this.$f(".dot").innerHTML += `
` } this.click(".dot li", (v, i) => this.changeDotActive(i)) } autoPlay() { this.defaultOption.TimeId = setInterval(() => this.sport(1), this.defaultOption.time) this.$f("").onmouseover = () => clearInterval(this.defaultOption.TimeId) this.$f("").onmouseout = () => this.autoPlay() } sport(offset) { this.defaultOption.initialSlide += offset if (this.defaultOption.initialSlide < 0) { this.defaultOption.initialSlide = 0 } if (this.defaultOption.initialSlide > this.defaultOption.length() - 1) { this.defaultOption.initialSlide = this.defaultOption.length() - 1 } if (this.defaultOption.initialSlide >= 0 && this.defaultOption.initialSlide <= this.defaultOption.length() - 1) { this.changeDotActive(this.defaultOption.initialSlide) } } slideTo(index) { this.changeDotActive(index) } click(className, callback) { this._f(className).forEach((v, i) => v.onclick = () => callback(v, i)) } $f(className) { return this.$(`${this.defaultOption.el} ${className}`) } _f(className) { return this._(`${this.defaultOption.el} ${className}`) } $(className) { return document.querySelector(className) } _(className) { return document.querySelectorAll(className) } }