原生js实现轮播图

一、思路

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>复制代码




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值