• es6的class类封装轮播图


    话不多说,直接上代码

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script></script>
        <style>
            * {
                margin: 0;
                padding: 0;
            }
    
            .box {
                 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 {
                 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 {
                 35px;
                height: 35px;
            }
    
            .oOl {
                list-style: none;
                position: absolute;
                bottom: 30px;
            }
    
            .oLi {
                 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>
  • 相关阅读:
    和阿文一起学H5-文字云制作
    uml与数据库设计
    设计模式——面向对象设计原则
    koajs框架解决的问题
    mongodb
    javascript 获取select选中text,2种方法
    带参数跳转
    express表单提交和参数接收4种方式
    ejs模版的4种输出方式
    nodejs事件
  • 原文地址:https://www.cnblogs.com/zhanping/p/11574035.html
Copyright © 2020-2023  润新知