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>

  • 相关阅读:
    虚函数和纯虚函数
    MS CRM 2011中PartyList类型字段的实例化
    MS CRM 2011的自定义与开发(12)——表单脚本扩展开发(4)
    MS CRM 2011的自定义与开发(12)——表单脚本扩展开发(2)
    MS CRM 2011的自定义和开发(10)——CRM web服务介绍(第二部分)——IOrganizationService(二)
    MS CRM 2011 SDK 5.08已经发布
    MS CRM 2011 Q2的一些更新
    最近很忙
    Microsoft Dynamics CRM 2011最近的一些更新
    补一篇,Update Rollup 12 终于发布了
  • 原文地址:https://www.cnblogs.com/fuyunlin/p/14477055.html
Copyright © 2011-2022 走看看