js部分
//插件 先引入 实例化 调用init()初始化 传入父元素 class lunbo { constructor() { this.index = 1 this.tim = null this.animated=false lunbo.liang() } // 页面布局 static liang() { let box = ' <div id="box"><div id="list" style="left: -600px;">11111<img src="5.jpg"><img src="1.jpg"><img src="2.jpg"><img src="3.jpg"><img src="4.jpg"><img src="5.jpg"><img src="1.jpg"></div><div id="controls"><span data-index="1" class="active"></span><span data-index="2"></span><span data-index="3"></span><span data-index="4"></span><span data-index="5"></span></div><a href="javascript:;" id="prev" class="arrow"> < </a><a href="javascript:;" id="next" class="arrow"> > </a></div>' lunbo.$('aa').innerHTML = box } // 获取id方法 static $(id) { return document.getElementById(id); } //初始化 init() { // this.buju() this.play() let this_ = this //鼠标移如 lunbo.$('box').onmouseover = function () { this_.stop() } //鼠标移出 lunbo.$('box').onmouseout = function () { this_.play() // this_.anniu() } //左遍 lunbo.$('prev').onclick = function () { this_.stop() this_.nextClick() this_.anniu() } // 右边 lunbo.$('next').onclick = function () { this_.stop() this_.prevClick() this_.anniu() } // this.anniu() } //移动的方法 move(dom, offset) { // console.log(this.animated) this.animated=true let this_=this var iTarget = parseInt(dom.style.left) + offset; //移动的时间 var time = 300 //间隔时间 var interval = 10 // 速度 var speed = offset / (time / interval) console.log(speed) function go() { // console.log(222) if ((speed > 0 && parseInt(dom.style.left) < iTarget) || (speed < 0 && parseInt(dom.style.left) > iTarget)) { // 动画没有完成 // console.log(iTarget) dom.style.left = parseInt(dom.style.left) + speed + 'px'; setTimeout(go, interval); } else { // 动画完成 dom.style.left = iTarget + 'px'; if (iTarget > -600) { dom.style.left = '-3000px'; } if (iTarget < -3000) { dom.style.left = '-600px'; } this_.animated=false console.log( this_.animated) } } go() } // 左边 nextClick() { if (this.animated) { return } if (this.index == 5) { this.index = 1 } else { this.index++ } this.move(list, -600) } //右边 prevClick() { if (this.animated) { return } if (this.index == 1) { this.index = 5 } else { this.index-- } this.move(list, 600) } // 开始 play() { this.tim = setInterval(() => { console.log(this) this.nextClick() this.anniu() }, 2000) } //停止 stop() { clearInterval(this.tim) } // 重置按钮 fn(index) { var spans = lunbo.$('controls').children; for (let i = 0; i < spans.length; i++) { spans[i].className = '' } spans[index - 1].className = 'active' } // 按钮 anniu() { var spans = lunbo.$('controls').children; this.fn(this.index) let this_ = this for (let i = 0; i < spans.length; i++) { spans[i].onclick = function () { if(this.className=='active'){ return; } // console.log(this.className) let indexs = this.dataset['index'] let offset = -600 * (indexs - this_.index) this_.move(list, offset) this_.index = indexs this_.fn(this_.index) } } } }
css部分
1 * { 2 margin: 0; 3 padding: 0; 4 } 5 6 a { 7 text-decoration: none; 8 } 9 10 #box { 11 margin: 100px auto; 12 width: 600px; 13 height: 400px; 14 position: relative; 15 /* border:2px solid #222; */ 16 border-radius: 50%; 17 overflow: hidden; 18 } 19 20 #list { 21 position: absolute; 22 width: 4200px; 23 height: 100%; 24 z-index: 1; 25 26 } 27 28 #list img { 29 width: 600px; 30 height: 400px; 31 float: left; 32 } 33 34 #controls { 35 position: absolute; 36 z-index: 2; 37 bottom: 8px; 38 width: 100%; 39 text-align: center; 40 } 41 42 #controls span { 43 width: 20px; 44 height: 20px; 45 border-radius: 50%; 46 background-color: #e3e3e3; 47 display: inline-block; 48 cursor: pointer; 49 } 50 51 #controls .active { 52 background-color: orange; 53 } 54 55 .arrow { 56 font-size: 60px; 57 position: absolute; 58 z-index: 2; 59 font-weight: bold; 60 top: 160px; 61 color: #f3f3f3,; 62 } 63 64 .arrow:hover { 65 color: orange; 66 } 67 68 #prev { 69 left: 0; 70 } 71 72 #next { 73 right: 0; 74 }
html部分
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <link rel="stylesheet" href="css.css"> <body> <div id="aa"></div> </body> <script src="lunbo.js"></script> <script> window.onload = function () { let a = new lunbo() a.init(document.getElementById('aa')) } </script> </html>