【原生】----轮播图---纯js

谁说我不能喝 提交于 2020-03-26 23:01:27

轮播图---纯js

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/Utils.js"></script>
</head>
<body>
    <script>
        var bnList,imgList,imgCon,dot,direction,pre;
        var pos=0,
            speed=30,
            time=240,
            playBool=false,
            autoBool=false;
        var srcList=["left.png","right.png","a.jpeg","b.jpeg","c.jpeg","d.jpeg","e.jpeg"];
        const WIDTH=1290;
        const HEIGHT=430;
        init();
        function init() {
            setInterval(animation,16);
            Utils.loadImg(srcList,finishImg);
        }
        
        function finishImg(list) {
            imgList=list;
            bnList=imgList.splice(0,2);
            imgList.forEach(function (t) {
                t.style.width=WIDTH+"px";
                t.style.height=HEIGHT+"px";
            });
            var carousel=Utils.ce("div",{
                width: WIDTH+"px",
                height:HEIGHT+"px",
                margin: "auto",
                position: "relative",
                overflow: "hidden"
            });
            createImgCon(carousel);
            createDot(carousel);
            createBn(carousel);
            document.body.appendChild(carousel);
            carousel.addEventListener("mouseenter",mouseHandler);
            carousel.addEventListener("mouseleave",mouseHandler);
            dot.style.left=(WIDTH-dot.offsetWidth)/2+"px";
            dotChange();
        }

        function mouseHandler(e) {
            if(e.type==="mouseenter"){
                autoBool=false;
            }else if(e.type==="mouseleave"){
                time=240;
                autoBool=true;
            }
        }
        
        function createImgCon(parent) {
            imgCon=Utils.ce("div",{
                width: WIDTH*2+"px",
                height: HEIGHT+"px",
                position: "absolute",
                left:0,
                top:0,
                fontSize: 0
            });
            imgCon.appendChild(imgList[0]);
            parent.appendChild(imgCon);
        }
        
        function createDot(parent) {
            dot=Utils.ce("ul",{
                margin: 0,
                padding: 0,
                listStyle: "none",
                position: "absolute",
                bottom: "10px"
            });
            for(var i=0;i<imgList.length;i++){
                var li=Utils.ce("li",{
                    width: "15px",
                    height: "15px",
                    backgroundColor: "rgba(255,0,0,0)",
                    border: "2px solid rgba(255,0,0,0.5)",
                    float: "left",
                    marginLeft: i===0 ? 0 : "10px",
                    borderRadius: "10px"
                });
                dot.appendChild(li);
            }
            dot.addEventListener("click",dotClickHandler);
            parent.appendChild(dot);
        }
        
        function createBn(parent) {
            for(var i=0;i<bnList.length;i++){
                Object.assign(bnList[i].style,{
                    position: "absolute",
                    left:i===0 ? "20px" : "none",
                    right:i===1 ? "20px" : "none",
                    top:(HEIGHT-bnList[i].height)/2+"px"
                });
                bnList[i].addEventListener("click",bnClickHandler);
                parent.appendChild(bnList[i]);
            }
        }
        
        function bnClickHandler(e) {
            if(playBool) return;
            if(this===bnList[0]){
                direction="right";
                pos--;
                if(pos<0) pos=imgList.length-1;
            }else{
                direction="left";
                pos++;
                if(pos>imgList.length-1)pos=0;
            }
            addNextImg();
        }
        
        function dotClickHandler(e) {
            if(playBool) return;
            if(e.target.nodeName!=="LI") return;
            var index=Array.from(this.children).indexOf(e.target);
            if(index===pos)return;
            if(index>pos){
                direction="left";
            }else{
                direction="right";
            }
            pos=index;
            addNextImg();
        }
        
        
        function addNextImg() {
            if(direction==="left"){
                imgCon.appendChild(imgList[pos]);
                imgCon.style.left="0px";
            }else{
                imgCon.insertBefore(imgList[pos],imgCon.firstElementChild);
                imgCon.style.left=-WIDTH+"px";
            }
            dotChange();
            playBool=true;
        }
        
        function dotChange() {
            if(pre){
                pre.style.backgroundColor="rgba(255,0,0,0)";
            }
            pre=dot.children[pos];
            pre.style.backgroundColor="rgba(255,0,0,0.5)";
        }
        
        function animation() {
            carouselPlay();
            autoPlay();
        }
        
        function carouselPlay() {
            if(!playBool) return;
            if(direction==="left"){
                if(imgCon.offsetLeft<=-WIDTH){
                    playBool=false;
                    imgCon.firstElementChild.remove();
                    imgCon.style.left="0px";
                    return;
                }
                imgCon.style.left=imgCon.offsetLeft-speed+"px";
            }else{
                if(imgCon.offsetLeft>=0){
                    playBool=false;
                    imgCon.lastElementChild.remove();
                    imgCon.style.left="0px";
                    return;
                }
                imgCon.style.left=imgCon.offsetLeft+speed+"px";
            }
        }
        
        function autoPlay() {
            if(!autoBool) return;
            time--;
            if(time>0) return;
            time=240;
            var evt=new MouseEvent("click");
            bnList[1].dispatchEvent(evt);
        }
    </script>
</body>
</html>

 

封装的方法,

Utils.js
var Utils=(function () {
    return {
        ce:function (type,style) {
            var elem=document.createElement(type);
            Object.assign(elem.style,style);
            return elem;
        },
        loadImg:function (imgSrcList,callBack) {
            var img=new Image();
            img.addEventListener("load",this.loadHandler);
            img.list=[];
            img.num=0;
            img.fn=callBack;
            img.arr=imgSrcList;
            img.self=this;
            img.src="./img/"+imgSrcList[0];
        },
        loadHandler:function (e) {
            this.list.push(this.cloneNode(false));
            this.num++;
            if(this.num>this.arr.length-1){
                if(!this.fn){
                    var evt=new Event("imgLoadFinish");
                    evt.list=this.list;
                    document.dispatchEvent(evt);
                    return;
                }
                this.fn(this.list);
                this.removeEventListener("load",this.self.loadHandler);
                return;
            }
            this.src="./img/"+this.arr[this.num];
        }
    }
})();

 

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