【移动端】带tab切换动画的swiper简易实现

963 阅读1分钟
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        body {
            margin: 0;
            padding: 0;
        }

        ul {
            width: 100vw;
            display: flex;
            padding: 0;
        }

        ul li {
            display: block;
            width: 20vw;
            text-align: center;
        }

        ul li.active {
            border-bottom: 1px solid red;
        }

        .box {
            width: 98vw;
            overflow: hidden;
            border: 3px solid blue;
        }

        .box .list {
            width: 100%;
            height: 100%;
            display: flex;
            vertical-align: top;
            line-height: 0;
        }

        .box .list img {
            width: 100vw;
            height: 50vh;
        }

        .line {
            width: 20vw;
            height: 1px;
            background-color: red;
            position: absolute;
            top: 35px;
        }
    </style>
</head>

<body>
    <ul>
        <li>tab1</li>
        <li>tab2</li>
        <li>tab3</li>
        <li>tab4</li>
        <li>tab5</li>
    </ul>
    <div class="line"></div>
    <div class="box swiper-container">
        <div class="list swiper-wrapper">
            <div class="swiper-slide"><img src="./img/img01.png" alt=""></div>
            <div class="swiper-slide"><img src="./img/img02.png" alt=""></div>
            <div class="swiper-slide"><img src="./img/img03.png" alt=""></div>
            <div class="swiper-slide"><img src="./img/img04.png" alt=""></div>
            <div class="swiper-slide"><img src="./img/img05.png" alt=""></div>
        </div>
    </div>
    <script src="js/swiper.js"></script>
    <script>
        const line = document.querySelector(".line");
        let startX = 0;
        var mySwiper = new Swiper('.swiper-container', {
            direction: 'horizontal',
            resistanceRatio: 0,
            on: {
                touchStart: function (swiper, event) {
                    startX = event.targetTouches[0].pageX;
                    console.log(startX);
                },
                touchMove: function (swiper, event) {
                    let x = event.targetTouches[0].pageX;
                    let index = swiper.activeIndex;
               		//第一张不允许左滑和最后一张图片不允许右滑
                    if((index==0 && startX-x>0) || (index==4 && startX-x<0) || (index!==0 && index!==4)){
                        line.style.transform = `translateX(${(-x + startX) * 0.2}px)`;
                    }
                },
                slideChange: function (swiper, event) {
                    line.style.transform = '';
                    line.style.left = (swiper.activeIndex) * 20 + 'vw';
                }
            }
        })
    </script>
</body>

</html>