es6的class类封装轮播图

匿名 (未验证) 提交于 2019-12-03 00:11:01

话不多说,直接上代码

<!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8">     <title>Title</title>     <script></script>     <style>         * {             margin: 0;             padding: 0;         }          .box {             width: 400px;             height: 350px;             border: 1px solid red;             overflow: hidden;             margin: auto;             margin-top: 50px;             position: relative;             top: 0;             left: 0;         }          .outer {             list-style: none;             position: absolute;             top: 0;             left: 0;             transition: .3s all linear;         }          .img {             width: 400px;             height: 350px;             float: left;         }          .left {             position: absolute;             top: 200px;             right: 0;             display: none;         }          .right {             position: absolute;             top: 200px;             left: 0;             display: none;         }          .right > :first-child, .left > :first-child {             width: 35px;             height: 35px;         }          .oOl {             list-style: none;             position: absolute;             bottom: 30px;         }          .oLi {             width: 25px;             height: 25px;             background: white;             border-radius: 50%;             float: left;         }          .color {             background: black;         }     </style> </head> <body> <div class="box">     <ul class="outer">         <li class="img" style="background: rebeccapurple">1</li>         <li class="img" style="background: orangered">2</li>         <li class="img" style="background: yellow">3</li>         <li class="img" style="background: green">4</li>         <li class="img" style="background: greenyellow">5</li>     </ul>     <a href="javascript: void (0);" class="left"><img src="./images/1.png" alt=""></a>     <a href="javascript: void (0);" class="right"><img src="./images/2.png" alt=""></a> </div> </body> <script>     class Chart {         constructor(name, json) {             this.box = document.querySelector(name);             this.json = json;             //获取轮播图的属性             this.outer = document.querySelector(name + ' .outer');  //注意加空格             this.left = document.querySelector(name + ' .left');             this.right = document.querySelector(name + ' .right');             //初始化             this.timer = null;  //自动播放             this.iNow = 0;             this.init();         };          init() {             const that = this; //保存一个this              console.log(this.json.a);             if (this.json.a){                 console.log(1);              }              //克隆第一张放到最后             let uLi = that.outer.children[0].cloneNode(true);             that.outer.appendChild(uLi);              that.outer.style.width = that.outer.children.length * that.outer.children[0].offsetWidth + 'px';                           //点击左右滑动             if (that.json.slide) {                 that.left.style.display = 'block';                 that.right.style.display = 'block';                  this.left.onclick = () => {                     that.leftGo()                 };                 this.right.onclick = () => {                     that.rightGo()                 };             }              //自动播放             if (that.json.move) {                 that.moveGo();                  //鼠标移入移出                 if (that.json.loop) {                     that.box.onmousemove = () => {                         clearInterval(that.timer)                     };                     that.box.onmouseout = () => {                         that.moveGo()                     }                 }             }              //展示小圆点             if (that.json.nav) {                 let oOL = document.createElement('ol');                 oOL.className = 'oOl';                 oOL.style.left = that.json.distanceLeft + 'px';                 that.box.appendChild(oOL);                 for (let i = 0; i < that.outer.children.length - 1; i++) {                     let oLi = document.createElement('li');                     oLi.className = 'oLi';                     oLi.style.marginLeft = that.json.distance + 'px';                     oOL.appendChild(oLi);                 }                 oOL.style.width = ((that.outer.children.length - 1) * document.querySelector('.oLi').offsetWidth) + (that.json.distance * that.outer.children.length) + 'px';                  that.alike();             }           };          leftGo() {             this.iNow++;              if (this.iNow >= this.outer.children.length) {                 this.iNow = 1;                 this.outer.style.transition = '0s all linear';                 this.outer.style.left = 0;             }               this.outer.style.left = -this.iNow * this.outer.children[0].offsetWidth + 'px';             this.outer.style.transition = '.3s all linear';              this.alike();         };          rightGo() {             this.iNow--;             if (this.iNow <= -1) {                 this.iNow = this.outer.children.length - 1;                 this.outer.style.transition = '0s all linear';                 this.outer.style.left = -(this.outer.children.length - 1) * this.outer.children[0].offsetWidth + 'px';                 this.iNow = this.outer.children.length - 2;             }             this.outer.style.left = -this.iNow * this.outer.children[0].offsetWidth + 'px';             this.outer.style.transition = '0.3s all linear';         };          moveGo() {             const that = this;             this.timer = setInterval(() => {                 that.leftGo();             }, that.json.speed || 1500)         };          //圆点对应每张图片         alike() {             let li = document.querySelectorAll('.oLi');             for (let i = 0; i < li.length; i++) {                 li[i].classList.remove('color');                 if (i == this.iNow) {                     li[i].classList.add('color');                 } else {                     li[i].classList.remove('color');                 }                 //特殊:最后一张的时候是第一个                 if (this.iNow == li.length) {                     li[0].classList.add('color');                 }                  //小圆点点击事件                 if (this.json.event) {                     li[i].onclick = () => {                         for (let i = 0; i < li.length; i++) {                             li[i].classList.remove('color');                         }                         li[i].classList.add('color');                         this.outer.style.left = -i * this.outer.children[0].offsetWidth + 'px';                     }                 }              }         }     }      new Chart('.box', {         move: true,  //自动轮播         speed: 1500,  //轮播速度         loop: true,  //鼠标移入移出效果         slide: true,  //点击左右滑动效果         nav: true,  //展示小圆点         distanceLeft: 76, //小圆点距离左边的距离         distance: 20,  //小圆点间距         event: true  //小圆点事件     }) </script> </html>

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!