欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

原生js实现轮播图

程序员文章站 2024-03-17 11:07:34
...

一、思路

1、使用css3新特性transform对所有图片进行定位(设计样式)。

2、每次向前滚(左箭头),向后滚(右箭头)都是对样式的改变。

左箭头:

照片的顺序:1,2,3,4,5,6,7

样式的顺序:7,6,5,4,3,2,1

照片应用上述css样式后:照片排列为7,6,5,4,3,2,1

假设初始化时样式为3为使照片处于*的样式,初始化是显示在中间的照片为5,当点击左箭头时,需要将6显示在中间,即使6对应于样式3。思想为保持照片的顺序不变,修改样式数组的顺序。把用于保存样式的数组的最后一个元素头插在该数组的头部,然后再删除最后一个元素。

右箭头同理:将样式数组首部的元素添加到该数组的尾部,并删除样式数组首部的元素。

二、代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        *{
            margin:0;
            padding:0;
        }
        #box{
            width: 460px;
            height: 300px;
            position:absolute;
            left:0;
            right:0;
            top:0;
            bottom:0;
            margin: auto;
            overflow: hidden;
        }
        li{
            position:absolute;
            left:0;
            right:0;
            bottom:0;
            top:0;
            list-style:none;
        }
        #left,#right{
            width:80px;
            height:80px;
        }
        #left{
            float:left;
            margin-left: 100px;
            margin-top: 30%;
        }
        #right{
            float:right;
            margin-right:100px;
            margin-top:30%;
        }
        .p1{
            transform:translate3d(-120px,0,0) scale(0.81);
        }
        .p2{
            transform:translate3d(0px,0,0) scale(0.81);
            transform-origin:0 50%;
            opacity: 0.8;
            z-index: 2;
        }
        .p3{
            transform:translate3d(120px,0,0) scale(1);
            z-index: 3;
            opacity: 1;
        }
        .p4{
            transform:translate3d(240px,0,0) scale(0.81);
            transform-origin:100% 50%;
            opacity: 0.8;
            z-index: 2;
        }
        .p5{
            transform:translate3d(360px,0,0) scale(0.81);
        }
        .p6{
            transform:translate3d(480px,0,0) scale(0.81);
        }
        .p7{
            transform:translate3d(600px,0,0) scale(0.81);
        }
    </style>
</head>
<body>
<img id='left' src="img/left.png">
<div id="box">
    <ul id="swiper">
        <li class="p7"><a><img src="img/1.jpg"/></a></li>
        <li class="p6"><a><img src="img/2.jpg"/></a></li>
        <li class="p5"><a><img src="img/3.jpg"/></a></li>
        <li class="p4"><a><img src="img/4.jpg"/></a></li>
        <li class="p3"><a><img src="img/5.jpg"/></a></li>
        <li class="p2"><a><img src="img/6.jpg"/></a></li>
        <li class="p1"><a><img src="img/7.jpg"/></a></li>
    </ul>
</div>
<img id="right" src="img/right.png">
</body>
<script>
   window.onload = function(){
        let cArr=["p7","p6","p5","p4","p3","p2","p1"];
        let oPre = document.getElementById('left');
        let oNext = document.getElementById('right');
        let oUl = document.getElementById('swiper');
        let oLi = oUl.getElementsByTagName('li');
        let oImage =  oUl.getElementsByTagName('img');
        let index = 0;
        oPre.addEventListener('click',function(){
            previmg();
        });
        oNext.addEventListener('click',function(){
            nextimg();
        });
       function previmg(){
           cArr.unshift(cArr[cArr.length-1]);   //把最后一张照片的css样式沾到第一张照片上
           cArr.pop();   //再把最后一张照片的css样式删除
           for(let i = 0; i < oLi.length; i++){
               oLi[i].className = cArr[i];
           }
       }
       function nextimg(){
           cArr.push(cArr[0]);
           cArr.shift();
           for(let i = 0; i < oLi.length; i++){
               oLi[i].className = cArr[i];
           }
       }
       var timer = setInterval(nextimg,3000);
   }
</script>
</html>复制代码