美文网首页
轮播图插件基于大神的代码,进行优化。

轮播图插件基于大神的代码,进行优化。

作者: LilyLaw | 来源:发表于2020-03-06 18:02 被阅读0次

    在上一篇文章基础上优化后的代码,主要是删掉了不必要的第一张前面的那张图片

    <!DOCTYPE html>
    <html lang="zh">
    <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>首尾无缝衔接轮播图</title>
        <style>
            *{
                margin: 0;
                padding: 0;
            }
            ul,li{
                list-style: none;
            }
            .wrapall{
                overflow: hidden; /* 一定要设置!!! */
                margin: auto;
            }
        </style>
    </head>
    <body>
        <div id="lll_slide" class="wrapall">
        </div>
        
        <script type="text/javascript">
            let imgarr = [  // 请确保每一张图片的宽高比都一样。
                './imgs/1.jpg',
                './imgs/2.jpg',
                './imgs/3.jpg'
            ];
            
            function Slideshow(obj){
                this.id = obj.id;   // 容器id
                this.container = document.getElementById(this.id); // 获取容器
                this.resetimgarr = obj.imgarr; // 图片数组
                this.curIndex = 0; //当前的图片索引
                this.wdwidth = obj.wdwidth // 获取当前body的宽度,注意,这里不能用 window.innerWidth;
            }
            
            Slideshow.prototype = {
                resetImgarr(){
                    let firstone = this.resetimgarr[0];
                    this.resetimgarr.push(firstone); // 尾部加入第一张照片
                },
                setPosition: function(){
                    this.setImgList();
                    this.setBtns();
                },
                setImgList(){
                    this.listbox = document.createElement('ul');    // 创建图片列表
                    this.resetimgarr.map((item,i)=>{
                        let li = document.createElement('li');
                        let img = document.createElement('img');
                        img.src = item;
                        li.appendChild(img);
                        this.listbox.appendChild(li);
                    });
                    this.container.appendChild(this.listbox);   // 将图片列表添加进 对应 id 的容器里。
                    let styleE = document.createElement('style'); // 动态添加css样式
                    styleE.innerHTML = `
                        #`+this.id+`{
                            width: `+ this.wdwidth +`px;
                        }
                        #`+this.id+` ul{
                            width: `+ this.resetimgarr.length * this.wdwidth +`px;
                            display: flex;
                            position: relative; /* 相对定位,用于移动 */
                            left: 0;    /* 设置初始移动位置 */
                        }
                        #`+this.id+` ul li{
                            width: `+this.wdwidth+`px;
                        }
                        #`+this.id+` ul li img{
                            width: 100%;
                            height: auto;
                            display: block;
                        }`;
                    this.container.appendChild(styleE); // 将style标签放进文档里
                },
                setBtns(){
                    let btnBox = document.createElement('div');
                    let prevBtn = document.createElement('button');
                    let nextBtn = document.createElement('button');
                    prevBtn.innerHTML = '上一张';
                    nextBtn.innerHTML = '下一张';
                    prevBtn.className = 'prevBtn';
                    nextBtn.className = 'nextBtn';
                    btnBox.appendChild(prevBtn);
                    btnBox.appendChild(nextBtn);
                    this.container.appendChild(btnBox);
                },
                scrollE(direction){ // 一张图移动完成
                    let eachMove = direction * 10; // 每一步移动的距离,并且控制方向
                    let tmpMoveAll = 0
                    if(direction === 1){
                        if(this.curIndex >= 3){ //到尾部最后一张后,重置到第一张
                            this.curIndex = 0;
                        }
                    }else if(direction === -1){
                        if(this.curIndex <= 0){ //到尾部最后一张后,重置到第一张
                            this.curIndex = 3;
                        }
                    }
                    
                    let beginE = setInterval(()=>{
                        if(Math.abs(tmpMoveAll)>=this.wdwidth){
                            clearInterval(beginE);
                            this.curIndex += direction;
                        }else{
                            tmpMoveAll += eachMove;                     
                            this.listbox.style.left = -tmpMoveAll - this.curIndex*this.wdwidth  +"px";
                        }
                    },1);
                },
                scrollAll(){    // 多张图轮播
                    let beginAll = setInterval(()=>{
                        this.scrollE(1);
                    },4000);
                },
                Init(){
                    this.resetImgarr();
                    this.setPosition();
                    this.scrollAll();
                    
                    this.container.querySelector('.prevBtn').addEventListener('click',()=>{ // 使用箭头函数,防止this指向改变
                        this.scrollE(-1);
                    });
                    this.container.querySelector('.nextBtn').addEventListener('click',()=>{ // 使用箭头函数,防止this指向改变
                        this.scrollE(1);
                    });
                }
            }
            
            let myslide = new Slideshow({id:"lll_slide",imgarr:imgarr,wdwidth:600});
            myslide.Init();
        </script>
    </body>
    </html>
    

    相关文章

      网友评论

          本文标题:轮播图插件基于大神的代码,进行优化。

          本文链接:https://www.haomeiwen.com/subject/oaswrhtx.html