轮播

116 阅读1分钟

基础轮播

实现点击左右图片变化,可以自动换图

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        .banner{
            position: relative;
        }
        img{
            width: 100%;
        }
        .banner>div{
            height:20px;
            width: 30px;
            background: rgb(255, 255, 255,0.5);
            line-height: 20px;
            text-align: center;
            color:#333;
            font-size:18px;
            position:absolute;
            top:50%;
            margin-top: -10px;
        }
        .banner>div:nth-of-type(1){
            border-radius:0 10px 10px 0;
            left: 0;
        }
        .banner>div:nth-of-type(2){
            border-radius:10px 0 0 10px;
            right: 0;
        }
    </style>
</head>
<body>
    <div class="banner">
        <img src="./img/1.jpg" alt="">
        <div class="button"><</div>
        <div class="button">></div>
    </div>
    
    <script>
        var images=["./img/1.jpg","./img/2.jpg","./img/3.jpg"],
            btns=document.getElementsByClassName("button"),
            img=document.getElementsByTagName("img")[0];

        var div=document.getElementsByClassName("banner")[0];
        
        for(var i=0;i<btns.length;i++){
            btns[i].onclick=function(){
                if(this.innerText==">"){
                    var first=images.shift();
                    images.push(first);
                    img.src=images[0]
                }else{
                    var last=images.pop();
                    images.unshift(last);
                    img.src=images[0];
                }
            }
        }

        timer=setInterval(function(){
            var first=images.shift();
            images.push(first);
            img.src=images[0]
        },1000);
        
        div.onmouseover=function(){
            clearInterval(timer);
        }
        div.onmouseout=function(){
            timer=setInterval(function(){
                var first=images.shift();
                images.push(first);
                img.src=images[0]
            },1000);
        }
    </script>
</body>
</html>

淡入淡出轮播

实现图片左右点击更换,可以自动换图

未封装版本

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            list-style: none;
        }

        img {
            width: 100%;
            vertical-align: top;
            opacity: 0;
        }

        .banner {
            position: relative;
        }

        .banner>.banner_img>img {
            position: absolute;
            left: 0;
            top: 0;
            transition: all 1s linear;
        }

        .banner>button {
            height: 30px;
            width: 40px;
            background: rgba(0, 0, 0, 0.3);
            border: none;
            font-size: 20px;
            text-align: center;
            line-height: 30px;
            cursor: pointer;
            position: absolute;
            top: 50%;
            margin-top: -15px;
        }

        .banner>button:active {
            background: rgba(0, 0, 0, 0.5);
        }

        .banner>button:nth-of-type(1) {
            left: 0;
            border-radius: 0 15px 15px 0;
        }

        .banner>button:nth-of-type(2) {
            right: 0;
            border-radius: 15px 0 0 15px;
        }

        .banner>ul {
            width: 60px;
            text-align: center;
            display: flex;
            justify-content: space-around;
            position: absolute;
            left: 50%;
            margin-left: -30px;
            bottom: 15px;
        }

        .banner>ul>li {
            width: 10px;
            height: 10px;
            border-radius: 50%;
            background: #999;
            cursor: pointer;
        }

        img.active {
            opacity: 1;
        }

        .banner>ul>li.active {
            background: #eee;
        }
    </style>
</head>

<body>
    <div class="banner">
        <div class="banner_img">
            <img src="./img/1.jpg" alt="" class="active">
            <img src="./img/2.jpg" alt="">
            <img src="./img/3.jpg" alt="">
        </div>
        <img src="./img/2.jpg" alt="">
        <button><</button>
        <button>></button>
        <ul>
            <li cli="0" class="active"></li>
            <li cli="1"></li>
            <li cli="2"></li>
        </ul>
    </div>

    <script>
        var btns=document.getElementsByTagName("button"),
            lis=document.getElementsByTagName("li"),
            imgs=document.getElementsByTagName("img"),
            j=0,
            div=document.getElementsByClassName("banner")[0];

        for(var i=0;i<btns.length;i++){
            btns[i].onclick=function(){
                if(this.innerText==">"){
                    j++;
                    j==lis.length&&(j=0);

                    for(i=0;i<lis.length;i++){
                        lis[i].className="";
                        imgs[i].className="";
                    }
                    lis[j].className="active";
                    imgs[j].className="active";
                }else{
                    j--;
                    j==-1&&(j=lis.length-1);

                    for(i=0;i<lis.length;i++){
                        lis[i].className="";
                        imgs[i].className="";
                    }
                    lis[j].className="active";
                    imgs[j].className="active";
                }
            }
        }

        for(var i=0;i<lis.length;i++){
            lis[i].onclick=function(){
                j=this.getAttribute("cli");

                for(i=0;i<lis.length;i++){
                    lis[i].className="";
                    imgs[i].className="";
                }
                lis[j].className="active";
                imgs[j].className="active";
            }
        }
            
        timer=setInterval(function(){
            j++;
            j==lis.length&&(j=0);

            for(i=0;i<lis.length;i++){
                lis[i].className="";
                imgs[i].className="";
            }
            lis[j].className="active";
            imgs[j].className="active";
        },2000)

        div.onmouseover=function(){
            clearInterval(timer);
        }
        div.onmouseout=function(){
            timer=setInterval(function(){
                j++;
                j==lis.length&&(j=0);

                for(i=0;i<lis.length;i++){
                    lis[i].className="";
                    imgs[i].className="";
                }
                lis[j].className="active";
                imgs[j].className="active";
            },2000)
    
            }

    </script>
</body>

</html>

封装版本

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            list-style: none;
        }

        img {
            width: 100%;
            vertical-align: top;
            opacity: 0;
        }

        .banner {
            position: relative;
        }

        .banner>.banner_img>img {
            position: absolute;
            left: 0;
            top: 0;
            transition: all 1s linear;
        }

        .banner>button {
            height: 30px;
            width: 40px;
            background: rgba(0, 0, 0, 0.3);
            border: none;
            font-size: 20px;
            text-align: center;
            line-height: 30px;
            cursor: pointer;
            position: absolute;
            top: 50%;
            margin-top: -15px;
        }

        .banner>button:active {
            background: rgba(0, 0, 0, 0.5);
        }

        .banner>button:nth-of-type(1) {
            left: 0;
            border-radius: 0 15px 15px 0;
        }

        .banner>button:nth-of-type(2) {
            right: 0;
            border-radius: 15px 0 0 15px;
        }

        .banner>ul {
            width: 60px;
            text-align: center;
            display: flex;
            justify-content: space-around;
            position: absolute;
            left: 50%;
            margin-left: -30px;
            bottom: 15px;
        }

        .banner>ul>li {
            width: 10px;
            height: 10px;
            border-radius: 50%;
            background: #999;
            cursor: pointer;
        }

        img.active {
            opacity: 1;
        }

        .banner>ul>li.active {
            background: #eee;
        }
    </style>
</head>

<body>
    <div class="banner">
        <div class="banner_img">
            <img src="./img/1.jpg" alt="" class="active">
            <img src="./img/2.jpg" alt="">
            <img src="./img/3.jpg" alt="">
        </div>
        <img src="./img/2.jpg" alt="">
        <button><</button>
        <button>></button>
        <ul>
            <li cli="0" class="active"></li>
            <li cli="1"></li>
            <li cli="2"></li>
        </ul>
    </div>

    <script>
        var btns=document.getElementsByTagName("button"),
            lis=document.getElementsByTagName("li"),
            imgs=document.getElementsByTagName("img"),
            j=0,
            div=document.getElementsByClassName("banner")[0];

        for(var i=0;i<btns.length;i++){
            btns[i].onclick=function(){
                if(this.innerText==">"){
                    change(1);
                }else{
                    change(-1);
                }
            }
        }

        for(var i=0;i<lis.length;i++){
            lis[i].onclick=function(){
                change(0,this);
            }
            
        }

        timer=setInterval(function(){
            change(1);
        },2000)

        div.onmouseover=function(){
            clearInterval(timer);
        }

        div.onmouseout=function(){
            timer=setInterval(function(){
                change(1);
            },2000)
        }

        function change(num,li){
            if(num){
                j+=num;
                if(j==lis.length){
                    j=0;
                }else if(j==-1){
                    j=lis.length-1;
                }
            }else{
                j=li.getAttribute("cli");
            }
            
            for(var i=0;i<lis.length;i++){
                lis[i].className="";
                imgs[i].className="";
            }
            lis[j].className="active";
            imgs[j].className="active";
        }

    </script>
</body>

</html>

滚动轮播

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            list-style: none;
        }

        img {
            vertical-align: top;
        }

        .banner {
            position: relative;
            overflow: hidden;
        }
        .banner_img{
            width: 300%;
            transition: all 1s linear;
        }
        .banner_img>img{
            width: 33.3%;
            float: left;
        }
        .banner>button {
            height: 30px;
            width: 40px;
            background: rgba(0, 0, 0, 0.3);
            border: none;
            font-size: 20px;
            text-align: center;
            line-height: 30px;
            cursor: pointer;
            position: absolute;
            top: 50%;
            margin-top: -15px;
        }

        .banner>button:active {
            background: rgba(0, 0, 0, 0.5);
        }

        .banner>button:nth-of-type(1) {
            left: 0;
            border-radius: 0 15px 15px 0;
        }

        .banner>button:nth-of-type(2) {
            right: 0;
            border-radius: 15px 0 0 15px;
        }

        .banner>ul {
            width: 60px;
            text-align: center;
            display: flex;
            justify-content: space-around;
            position: absolute;
            left: 50%;
            margin-left: -30px;
            bottom: 15px;
        }

        .banner>ul>li {
            width: 10px;
            height: 10px;
            border-radius: 50%;
            background: #999;
            cursor: pointer;
        }

        .banner>ul>li.active {
            background: #eee;
        }
    </style>
</head>

<body>
    <div class="banner">
        <div class="banner_img">
            <img src="./img/1.jpg" alt="">
            <img src="./img/2.jpg" alt="">
            <img src="./img/3.jpg" alt="">
        </div>
        <button><</button>
        <button>></button>
        <ul>
            <li cli="0" class="active"></li>
            <li cli="1"></li>
            <li cli="2"></li>
        </ul>
    </div>

    <script>
        var btns=document.getElementsByTagName("button"),
            lis=document.getElementsByTagName("li"),
            imgbox=document.getElementsByClassName("banner_img")[0],
            j=0,
            div=document.getElementsByClassName("banner")[0];

        btns[1].style.display=j==2?"none":"block";
        btns[0].style.display=j==0?"none":"block";

        for(var i=0;i<btns.length;i++){
            btns[i].onclick=function(){
                if(this.innerText==">"){
                    j++;

                    btns[1].style.display=j==2?"none":"block";
                    btns[0].style.display=j==0?"none":"block";

                    imgbox.style.marginLeft=j*(-100)+"%";

                    for(var i=0;i<lis.length;i++){
                        lis[i].className="";
                    }
                    lis[j].className="active";
                }else{
                    j--;
                    
                    btns[1].style.display=j==2?"none":"block";
                    btns[0].style.display=j==0?"none":"block";

                    imgbox.style.marginLeft=j*(-100)+"%";

                    for(var i=0;i<lis.length;i++){
                        lis[i].className="";
                    }
                    lis[j].className="active";
                }
            }
        }

        for(var i=0;i<lis.length;i++){
            lis[i].onclick=function(){
                j=this.getAttribute("cli");

                btns[1].style.display=j==2?"none":"block";
                btns[0].style.display=j==0?"none":"block";

                imgbox.style.marginLeft=j*(-100)+"%";

                for(var i=0;i<lis.length;i++){
                    lis[i].className="";
                }
                lis[j].className="active";
            } 
        }
        
        timer=setInterval(function(){
            j++;
            j==3&&(j=0);

            btns[1].style.display=j==2?"none":"block";
            btns[0].style.display=j==0?"none":"block";

            imgbox.style.marginLeft=j*(-100)+"%";

            for(var i=0;i<lis.length;i++){
                lis[i].className="";
            }
            lis[j].className="active";           
        },2000)

        div.onmouseover=function(){
            clearInterval(timer);
        }

        div.onmouseout=function(){
            timer=setInterval(function(){
                j++;
                j==3&&(j=0);

                btns[1].style.display=j==2?"none":"block";
                btns[0].style.display=j==0?"none":"block";

                imgbox.style.marginLeft=j*(-100)+"%";

                for(var i=0;i<lis.length;i++){
                    lis[i].className="";
                }
                lis[j].className="active";           
            },2000)
        }


    </script>
</body>

</html>

封装对象版轮播

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            list-style: none;
        }

        img {
            vertical-align: top;
        }

        .banner {
            position: relative;
            overflow: hidden;
        }
        .banner_img{
            width: 300%;
            transition: all 1s linear;
        }
        .banner_img>img{
            width: 33.3%;
            float: left;
        }
        .banner>button {
            height: 30px;
            width: 40px;
            background: rgba(0, 0, 0, 0.3);
            border: none;
            font-size: 20px;
            text-align: center;
            line-height: 30px;
            cursor: pointer;
            position: absolute;
            top: 50%;
            margin-top: -15px;
        }

        .banner>button:active {
            background: rgba(0, 0, 0, 0.5);
        }

        .banner>button:nth-of-type(1) {
            left: 0;
            border-radius: 0 15px 15px 0;
        }

        .banner>button:nth-of-type(2) {
            right: 0;
            border-radius: 15px 0 0 15px;
        }

        .banner>ul {
            width: 60px;
            text-align: center;
            display: flex;
            justify-content: space-around;
            position: absolute;
            left: 50%;
            margin-left: -30px;
            bottom: 15px;
        }

        .banner>ul>li {
            width: 10px;
            height: 10px;
            border-radius: 50%;
            background: #999;
            cursor: pointer;
        }

        .banner>ul>li.active {
            background: #eee;
        }
    </style>
</head>

<body>
    <div class="banner">
        <div class="banner_img">
            <img src="./img/1.jpg" alt="">
            <img src="./img/2.jpg" alt="">
            <img src="./img/3.jpg" alt="">
        </div>
        <button><</button>
        <button>></button>
        <ul>
            <li cli="0" class="active"></li>
            <li cli="1"></li>
            <li cli="2"></li>
        </ul>
    </div>

    <script>
        var carousal={
            "btns":document.getElementsByTagName("button"),
            "lis":document.getElementsByTagName("li"),
            "banner":document.getElementsByClassName("banner")[0],
            "imgbox":document.getElementsByClassName("banner_img")[0],
            "j":0,
            "timer":null,
            "init":function(){
                this.bind();
                this.btnanimate();
                this.dsq();
            },
            "bind":function(){
                var me=this;
                for(var i=0;i<this.btns.length;i++){
                    this.btns[i].onclick=function(){
                        if(this.innerText==">"){
                            me.animate(1);
                        }else{
                            me.animate(-1);
                        }
                        
                    }
                }
                for(var i=0;i<this.lis.length;i++){
                    this.lis[i].onclick=function(){
                        me.animate(0,this)
                    }
                }
                this.banner.onmouseover=function(){
                    me.dsq();
                }
                this.banner.onmouseout=function(){
                    me.dsq();
                }
            },
            "animate":function(num,li){
                this.calcJ(num,li);
                this.btnanimate();
                this.clear();
                this.imgbox.style.marginLeft=this.j*(-100)+"%";
                this.lis[this.j].className="active";
            },
            "btnanimate":function(){
                this.btns[0].style.display=this.j==0?"none":"block";
                this.btns[1].style.display=this.j==2?"none":"block";
            },
            "clear":function(){
                for(var i=0;i<this.lis.length;i++){
                    this.lis[i].className="";
                }
            },
            "calcJ":function(num,li){
                if(num){
                    this.j+=num;
                    this.j==this.lis.length&&(this.j=0);
                    this.j==-1&&(j=this.lis.length-1);
                }else{
                    this.j=parseInt(li.getAttribute("cli"));
                }
            },
            "dsq":function(){
                var me=this;
                if(this.timer==null){
                    this.timer=setInterval(function(){
                        me.animate(1);
                    },3000)
                }else{
                    clearInterval(this.timer);
                    this.timer=null;
                }
            }
        }


        carousal.init();

    </script>
</body>

</html>

面向对象轮播

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            list-style: none;
        }

        img {
            vertical-align: top;
        }

        .banner {
            position: relative;
            overflow: hidden;
            height: fit-content;
        }
        .banner_img{
            width: 300%;
            transition: all 1s linear;
        }
        .banner_img>img{
            width: 33.3%;
            float: left;
        }
        .banner>button {
            height: 30px;
            width: 40px;
            background: rgba(0, 0, 0, 0.3);
            border: none;
            font-size: 20px;
            text-align: center;
            line-height: 30px;
            cursor: pointer;
            position: absolute;
            top: 50%;
            margin-top: -15px;
        }

        .banner>button:active {
            background: rgba(0, 0, 0, 0.5);
        }

        .banner>button:nth-of-type(1) {
            left: 0;
            border-radius: 0 15px 15px 0;
        }

        .banner>button:nth-of-type(2) {
            right: 0;
            border-radius: 15px 0 0 15px;
        }

        .banner>ul {
            width: 60px;
            text-align: center;
            display: flex;
            justify-content: space-around;
            position: absolute;
            left: 50%;
            margin-left: -30px;
            bottom: 15px;
        }

        .banner>ul>li {
            width: 10px;
            height: 10px;
            border-radius: 50%;
            background: #999;
            cursor: pointer;
        }

        .banner>ul>li.active {
            background: #eee;
        }
    </style>
</head>

<body>
    <div class="banner" id="cal">
        <div class="banner_img">
            <img src="./img/1.jpg" alt="">
            <img src="./img/2.jpg" alt="">
            <img src="./img/3.jpg" alt="">
        </div>
        <button><</button>
        <button>></button>
        <ul>
            <li cli="0" class="active"></li>
            <li cli="1"></li>
            <li cli="2"></li>
        </ul>
    </div>

    <div class="banner" id="cal2">
        <div class="banner_img">
            <img src="./img/1.jpg" alt="">
            <img src="./img/2.jpg" alt="">
            <img src="./img/3.jpg" alt="">
        </div>
        <button><</button>
        <button>></button>
        <ul>
            <li cli="0" class="active"></li>
            <li cli="1"></li>
            <li cli="2"></li>
        </ul>
    </div>

    <script>
        
        function cal(parent){
            this.parent=parent;
            this.imgbox=parent.getElementsByClassName("banner_img")[0];
            this.btns=parent.getElementsByTagName("button");
            this.lis=parent.getElementsByTagName("li");
            this.j=0;
            this.timer=null;
        }
        cal.prototype.init=function(){
            this.bind();
            this.dsq();
        }
        cal.prototype.bind=function(){
            var me=this;
            for(var i=0;i<this.btns.length;i++){
                this.btns[i].onclick=function(){
                    if(this.innerText==">"){
                        me.animate(1);
                    }else{
                        me.animate(-1);
                    }
                }
            }
            for(var i=0;i<this.lis.length;i++){
                this.lis[i].onclick=function(){
                    me.animate(0,this);  
                }
            }
            this.parent.onmouseover=function(){
                me.dsq();
            }
            this.parent.onmouseout=function(){
                me.dsq();
            }
        }
        cal.prototype.animate=function(num,li){
            this.clear()
            this.calcJ(num,li);
            this.imgbox.style.marginLeft=this.j*(-100)+"%";
            this.lis[this.j].className="active";
        }
        cal.prototype.calcJ=function(num,li){
            if(num){
                this.j+=num;
                this.j==this.lis.length&&(this.j=0);
                this.j==-1&&(this.j=this.lis.length-1);
            }else{
                this.j=parseInt(li.getAttribute("cli"));
            }
        }
        cal.prototype.clear=function(){
            for(var i=0;i<this.lis.length;i++){
                this.lis[i].className="";            
            }
        }
        cal.prototype.dsq=function(){
            var me=this;
            if(this.timer==null){
                this.timer=setInterval(function(){
                    me.animate(1)
                },2000)
            }else{
                clearInterval(this.timer);
                this.timer=null;
            }
        }

        var banner=document.getElementsByClassName("banner");

        var cal1=new cal(banner[0]);
        cal1.init();

        var cal2=new cal(banner[1]);
        cal2.init();
    </script>
</body>

</html>