其实从培训机构学习的时候就交手写轮播,工作两年就没有自己不参考任何文章去写一个出来,正好这段时间想好好学学面向对象,于是写了一个轮播,废话少说,直接上代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="carousel.js"></script> <style> div,ul,li{ margin: 0; padding: 0; } #outer{ transition: 0.5s all; width: 1000px; overflow: hidden; position: relative; } #carousel{ left:0%; transition: 0.5s all; position: relative; height:600px; width: 100000px; overflow: hidden; } #carousel li{ transition: 0.5s all; letter-spacing: 4px; color: #fff; font-size: 30px; text-align: center; line-height: 600px; float: left; width: 1000px; height: 600px; list-style: none; } #btns button{ position: absolute; top:300px } #btns button:first-child{ left: 0; } #btns button:last-child{ right: 0; } #port{ position: absolute; bottom:0; text-align: -webkit-center; width: 100%; } #port span{ cursor: pointer; display: block; height:10px; width:10px; background-color: #fff; border:1px solid #eee; border-radius: 50%; float: left; margin:10px 0 10px 4px } .setcolor{ background-color: #666 !important; border:1px solid transparent; } .returncolor{ background-color: #fff !important; border:1px solid #eee; } </style> </head> <body> <div style="width: 100%;text-align: -webkit-center"> <div id="outer"> <ul id="carousel"> <li style="background: blue;display: none">第四屏(tt)</li> <li style="background: green">第一屏(ljz)</li> <li style="background: red">第二屏(zss)</li> <li style="background: pink">第三屏(ljy)</li> <li style="background: blue">第四屏(tt)</li> <li style="background: green">第一屏(ljz)</li> </ul> <div id="port"> <div style="overflow: hidden;width: 80px"> <span οnclick="carousel.getCurrentPage(0)"></span> <span οnclick="carousel.getCurrentPage(1)"></span> <span οnclick="carousel.getCurrentPage(2)"></span> <span οnclick="carousel.getCurrentPage(3)"></span> </div> </div> <div id="btns"> <button οnclick="carousel.btnnext()">prev</button> <button οnclick="carousel.btnprev()">next</button> </div> </div> </div> <script> var carousel = new carouselModel({imageID:'carousel'}) carousel.makeArrInit() carousel.autoRunning() // carousel.changeCarouselArr('btnnext') </script> </body> </html>
引入js
// it's ljz carousel designed var carouselModel = function (data) { this.imageID = data.imageID this.makeArr = [] this.nums = '' this.carousel = '' this.pageNumsArr = [] this.pageIndex = 0 this.rexNumber = function () { if (typeof this.imageID !== 'string' || this.imageID === '') { console.log('imageID格式错误') return } } this.makeArrInit = function () { this.rexNumber() let eleID = document.getElementById(this.imageID) this.carousel = eleID let eles = eleID.getElementsByTagName('li') let numsarr = document.getElementById('port').getElementsByTagName('span') for (let i in eles) { if (typeof eles[i] === 'object') { this.makeArr.push(eles[i]) } if (typeof numsarr[i] === 'object') { this.pageNumsArr.push(numsarr[i]) } } this.pageNumsArr[0].className = 'setcolor' } this.btnprev = function () { let cleft = this.carousel.style.left cleft = cleft.replace(/%/,'') this.nums = this.carousel.style.left.replace(/%/,'').replace(/-/,'')/100 if(this.nums<this.makeArr.length - 3){ this.carousel.style.left = cleft - 100 +'%' this.pageIndex ++ }else{ console.log(this.pageIndex) this.carousel.style.left = '0%' this.nums = '' this.pageIndex = 0 } this.setNumsArrColor() } this.btnnext = function () { let cleft = this.carousel.style.left cleft = cleft.replace(/%/, '') this.nums = this.carousel.style.left.replace(/%/, '').replace(/-/, '') / 100 if (this.nums === 0) { this.carousel.style.left = '-' + (this.makeArr.length - 1) * 100 + '%' this.pageIndex = this.makeArr.length - 1 } else if (this.nums > 0) { this.pageIndex -- this.carousel.style.left = parseInt(cleft) + 100 + '%' } this.setNumsArrColor() } this.autoRunning = function (callback) { let _this = this setTimeout(function () { // _this.btnprev() _this.autoRunning() },6000) } this.setNumsArrColor = function () { for(let i in this.pageNumsArr){ this.pageNumsArr[i].className = 'returncolor' } this.pageNumsArr[this.pageIndex].className = 'setcolor' } this.getCurrentPage = function (index) { this.carousel.style.left = (index) * -100 + '%' this.pageIndex = index this.setNumsArrColor() } this.changeCarouselArr = function (type) { if(type === 'btnprev') { let splitenum = this.makeArr.splice(this.makeArr.length - 1,1) console.log(splitenum[0].innerText) this.makeArr.unshift(splitenum[0]) for(let i in this.makeArr){ console.log('for:' + this.makeArr[i].innerText) } } else if (type === 'btnnext') { let splitenum = this.makeArr.splice(0, 1) console.log(splitenum[0].innerText) this.makeArr.push(splitenum[0]) for (let i in this.makeArr) { console.log('for:' + this.makeArr[i].innerText) } } }
}
其实写的不怎么样,不是无缝轮播,但是写完后对面向对象有了进一步的了解。