zoukankan      html  css  js  c++  java
  • 轮播图完整代码

    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>移动轮播图</title>
    
        <style>
            * {
                padding: 0;
                margin: 0;
            }
            li {
                list-style: none;
            }
    
            .banner {
                position: relative;
                /*padding-top: 44px;*/
                overflow: hidden;
            }
    
            .banner img {
                 100%;
            }
            .banner ul {
                overflow: hidden;/*清楚浮动*/
                 500%;
                margin-left: -100%;/*让第一张漏出来 不添加的话是最后一张*/
            }
            .banner ul li {
                float: left;
                 20%; /*500%的20% 就是100%*/
            }
            .banner ol {
                position: absolute;
                bottom: 5px;
                right: 5px;
                margin: 0;/*清除ol的默认值*/
            }
            .banner ol li {
                display: inline-block;
                 5px;
                height: 5px;
                background-color: #fff;
                list-style: none;
                border-radius: 2px;
                transition: all .3s;
            }
    
            .banner ol li.current {
                 15px;
            }
        </style>
    </head>
    <body>
    
    <div class="banner">
        <ul>
            <li><img src="image/b3.jpg" alt=""></li>
            <li><img src="image/b1.jpg" alt=""></li>
            <li><img src="image/b2.jpg" alt=""></li>
            <li><img src="image/b3.jpg" alt=""></li>
            <li><img src="image/b1.jpg" alt=""></li>
        </ul>
        <!-- 小圆点 -->
        <ol>
            <li class="current"></li>
            <li></li>
            <li></li>
        </ol>
    </div>
    
    <script>
        var banner = document.querySelector('.banner');
        var ul = banner.children[0];//做运动的主体
        var ol = banner.querySelector('ol');
        var bannerW = banner.offsetWidth;
        console.log(bannerW);
    
        var index = 0;
    
        // 图片自动播放
        //1.1 开启定时器
        var timer = setInterval(function () {
            index++;
            var translatex = -index * bannerW ;
            //给ul添加过渡效果 让图片优雅的移动
            ul.style.transition = 'all .3s';
            ul.style.transform = 'translateX('+ translatex + 'px)';
        },2000);
    
        //1.2 图片无缝滚动  不能直接判断 因为有过渡效果 有延时
        //等过渡完成后 再去判断  监听过渡完成的事件 transitionend
        ul.addEventListener('transitionend',function () {
            //判断是否到了最后一张
            if (index == 3) {
                index = 0;
                ul.style.transition = 'none';//去掉过渡效果 让ul快速跳到目标位置
                var translatex = -index * bannerW ;//利用最新的索引号 * 宽度 继续去滚动图片
                ul.style.transform = 'translateX('+ translatex + 'px)';
            }
            //判断是否到了第一张
            if (index < 0) {
                index = 2;
                ul.style.transition = 'none';//去掉过渡效果 让ul快速跳到目标位置
                var translatex = -index * bannerW ;//利用最新的索引号 * 宽度 继续去滚动图片
                ul.style.transform = 'translateX('+ translatex + 'px)';
            }
    
            // 3. 小圆点跟随变化
            // 把ol里面li带有current类名的选出来去掉类名 remove
            ol.querySelector('.current').classList.remove('current');
            // 让当前索引号 的小li 加上 current   add
            ol.children[index].classList.add('current');
        });
    
        //2 手指滑动轮播图
        //2.1 触摸元素 获得手指做标的值
        var startX = 0;
        var moveX = 0;
        var flag = false;
        ul.addEventListener('touchstart',function(e){
            startX = e.targetTouches[0].pageX;
            clearInterval(timer);
        });
    
        //2.2 移动手指 计算手指的滑动距离 并且移动盒子
        ul.addEventListener('touchmove',function (e) {
            //移动的距离 = 滑动的距离 - 初始的距离
            moveX = e.targetTouches[0].pageX - startX;
            console.log(moveX);
    
            //移动盒子  盒子原来的位置 + 手指移动的距离
            var translatex = -index * bannerW + moveX;
            //手指拖动的时候 不需要动画效果 所以取消过渡效果
            ul.style.transition = 'none';
            ul.style.transform = 'translateX('+ translatex + 'px)';
            flag = true; // 如果用户手指滑动过 就设置为true 如果没有滑动 flag就一直是false
            e.preventDefault(); // 阻止滚动屏幕的行为
        });
    
    
        //4 手指离开屏幕  根据滑动距离分不同的情况
        //如果移动距离小于某个像素 就回弹回去
        //如果移动距离大于某个像素 就上一张 下一张 滑动
        ul.addEventListener('touchend',function(){
    
            if (flag) { //如果是true才做判断计算尺寸 如果是法拉色就不执行
                //4.1 大于50的操作 播放图片
                if (Math.abs(moveX) > 50) { //moveX 有可能是负值 所以取绝对值
                    //如果是右滑 播放上一张 moveX是正值
                    //如果是左滑 播放下一张 moveX是负值
                    if (moveX > 0) {//大于0 就是正值
                        index--;
                    } else {//小于0 就是负值
                        index++;
                    }
                    var translatex = -index * bannerW;
                    ul.style.transition = 'all 0.3s';
                    ul.style.transform = 'translateX('+ translatex + 'px)';
                } else {//4.2 小于50的操作 回弹
                    var translatex = -index * bannerW;
                    ul.style.transition = 'all 0.3s';
                    ul.style.transform = 'translateX('+ translatex + 'px)';
                }
            }
    
            //5 手指离开屏幕 定时器重新开始
            clearInterval(timer); //开启前先把前面的定时器清除 保证页面只有一个定时器
            timer = setInterval(function(){
                index++;
                var translatex = -index * bannerW ;
                //给ul添加过渡效果 让图片优雅的移动
                ul.style.transition = 'all .3s';
                ul.style.transform = 'translateX('+ translatex + 'px)';
            },2000)
        });
    </script>
    </body>
    </html>

  • 相关阅读:
    luogu P3804 【模板】后缀自动机 (SAM)
    莫队
    luogu P4688 [Ynoi2016]掉进兔子洞
    FZOJ 2331 LYK loves graph
    字典树
    luogu P6623 [省选联考 2020 A 卷] 树
    luogu P6018 [Ynoi2010]Fusion tree
    luogu P3264 [JLOI2015]管道连接
    最小斯坦纳树
    9. 回文数
  • 原文地址:https://www.cnblogs.com/fuyunlin/p/14477055.html
Copyright © 2011-2022 走看看