zoukankan      html  css  js  c++  java
  • web移动端_移动端的轮播

    一、前言                                                                                    

    移动端的轮播图通常有以下几个功能:

                                                          1. 自动轮播图且无缝 定时器,过渡*/
                                                    2. 小圆点点要随着图片的轮播改变 根据索引切换
                                                    3. 滑动效果 利用touch事件完成*/
                                                    4. 滑动结束的时候 如果滑动的距离不超过屏幕的1/3 吸附回去 
                                                    5. 滑动结束的时候 如果滑动的距离超过屏幕的1/3 切换(上一张,下一张)根据滑动的方向,

    二、基础内容                                                                             

    1、自动轮播图实现:

          (1)先获取到需要操作的dom

             

        /*轮播图*/
        var banner = document.querySelector('.jd_banner');
        /*屏幕宽度*/
        var width = banner.offsetWidth;
        /*图片容器*/
        var imageBox = banner.querySelector('ul:first-child');
        /*点容器*/
        var pointBox = banner.querySelector('ul:last-child');
        /*所有的点*/
        var points = pointBox.querySelectorAll('li');

               (2)利用定时器和index索引值让轮播图动起来

            var index = 1; //让index的初始值为0
        var timer = setInterval(function(){//设置定时器
       
            index++//每秒中让定时器值加1
            imageBox.style.transition = "all 0.2s" //加过渡
            imageBox.style.webkitTransition = "all 0.2s"
    
    
            /*移动*/
                    /*每次ul移动的距离 = index * width*/
            imageBox.style.transform = 'translateX(' + (-index*width)+ 'px)';
            imageBox.style.webkitTransform = 'translateX(' + (-index*width) + 'px)';
        
    
    
        },2000)
              
           
        /*需要等最后一张动画结束去判断是否瞬间定位到第一张*/
        /*当index=9的时候,然后瞬间将当前的索引变为1*/
        imageBox.addEventListener('transitionend',function(){
            if(index >=9 ){ //当索引值大于9的时候,瞬间让当前索引值为1
                index=1  ;
                /*清除过渡*/
                imageBox.style.transition='none'
                imageBox.style.webkitTransition='none'
                /*做位移*/
                /*移动:只能在自动滚动的时候无缝滚动,但是当用户开始滑动的时候*/
                imageBox.style.transform = 'translateX(' + (-index*width)+ 'px)';
                imageBox.style.webkitTransform = 'translateX(' + (-index*width) + 'px)';
            }else if(index <=0 ){/*用户向左边,index小于等于0*/
                index=8;
                /*清除过渡*/
                imageBox.style.transition='none'
                imageBox.style.webkitTransition='none'
                /*做位移*/
                /*移动:只能在自动滚动的时候无缝滚动,但是当用户开始滑动的时候需要停止无缝滚动*/
                imageBox.style.transform = 'translateX(' + (-index*width)+ 'px)';
                imageBox.style.webkitTransform = 'translateX(' + (-index*width) + 'px)';
            }
    
            
            /*此时此刻index的取值范围只能是1-8了*/
            /*点的取值范围是0-7*/
            console.log(index)
    
            setPoint() //设置了一个点高亮的函数
    
        })
    
       

     2. 小圆点点要随着图片的轮播改变 根据索引切换*/

     /*设置点的方法*/
        var setPoint = function(){
                       //先遍历清除所有的now样式
            for(var i=0; i<points.length; i++){
                var obj = points[i]
    
                /*清除样式*/
                obj.classList.remove('now')
    
            }
    
                  //然后给将要高亮的点加上样式
            points[index - 1].classList.add('now');
        }

    3. 滑动效果 利用touch事件完成*/

    /*绑定滑动事件*/
            var startX = 0;    //初始化开始滑动时的坐标
            var distanceX = 0; //设置开始滑动的距离
            var isMove = false //标志是否滑动
    
        imageBox.addEventListener('touchstart',function(e){
    
            /*在鼠标一开始滑动的时候就清除定时器
                       不让轮播图有自动滚动的效果
    
                   */
            clearInterval(timer)
    
            /*记录起始位置的x坐标*/
            startX = e.touches[0].clientX;
    
    
        })
    
        imageBox.addEventListener('touchmove',function(e){
            
                    isMove = true//开始滑动的时候isMove = true
            /*记录滑动过程中的x坐标*/
            var moveX = e.touches[0].clientX;
    
            /*在滑动过程中作对比*/
            /*计算位移  有正负方向*/
             distanceX = moveX - startX
    
            /*这个用来计算目标元素的位移*/
            /*元素的定位等于当前定位*/
            /*目标定位 = 当前定位 + 手指移动的定位*/
            var translateX = -index * width + distanceX
            console.log(translateX)
    
              /*如果元素有过渡。肯能会有迟钝的效果,所以在之前需要清除过渡*/
                     imageBox.style.transition='none'
            imageBox.style.webkitTransition='none'
    
            /*移动:只能在自动滚动的时候无缝滚动,但是当用户开始滑动的时候*/
                imageBox.style.transform = 'translateX(' + (-index*width)+ 'px)';
                imageBox.style.webkitTransform = 'translateX(' + (-index*width) + 'px)';
              
    
        })
    
        
            

    4、在滑动结束的时候判断滑动的距离是否大于设备宽度是1/3.

         大于:切换到上一张或者下一张

         小于:让轮播图吸附回去,还是显示之前那一张

    imageBox.addEventListener('touchend',function(){
                   
                    //如果滑动的距离小于设备的1/3,就让他吸附回去
            if(Math.abs(distanceX)<width/3 &&  isMove){
                //吸附回去
                /*清除过渡*/
                imageBox.style.transition='none'
                imageBox.style.webkitTransition='none'
                /*做位移*/
                /*移动:只能在自动滚动的时候无缝滚动,但是当用户开始滑动的时候*/
                imageBox.style.transform = 'translateX(' + (-index*width)+ 'px)';
                imageBox.style.webkitTransform = 'translateX(' + (-index*width) + 'px)';
    
    
            }else{
                //切换
                //上一张
                //下一张
                //往左滑动是下一张,往右滑动是上一张
                //可以根据distance的正负方向来判断滑动的方向
                if(distanceX>0){
                    index--
                    console.log('右')
                }else{
                    index++
                    console.log('左')
                }
                //根据index动画的移动
                /*清除过渡*/
                imageBox.style.transition='none'
                imageBox.style.webkitTransition='none'
                /*做位移*/
                /*移动:只能在自动滚动的时候无缝滚动,但是当用户开始滑动的时候*/
                imageBox.style.transform = 'translateX(' + (-index*width)+ 'px)';
                imageBox.style.webkitTransform = 'translateX(' + (-index*width) + 'px)';
    
            }
    
            //最后做一次参数重置
            startX=0;
            distanceX=0;
            isMove = true;
            clearInterval(timer)
            timer = setInterval(function(){
            /*加过渡*/
            index++
            imageBox.style.transition = "all 0.2s"
            imageBox.style.webkitTransition = "all 0.2s"
    
    
            /*移动*/
            imageBox.style.transform = 'translateX(' + (-index*width)+ 'px)';
            imageBox.style.webkitTransform = 'translateX(' + (-index*width) + 'px)';
            /*现在是可以滚动了,但是没有加无缝效果*/
    
        },2000)

    三、总结                                                                                    

  • 相关阅读:
    cs231n--详解卷积神经网络
    Spring 2017 Assignments2
    深度神经网络基础
    cs231n官方note笔记
    Spring 2017 Assignments1
    问题
    win7下解决vs2015新建项目,提示“未将对象引用设置到引用实例“的问题
    项目二:人脸识别
    ubutu强制关闭应用程序的方法
    将caj文件转化为pdf文件进行全文下载脚本(ubuntu下亲测有用)
  • 原文地址:https://www.cnblogs.com/xxm980617/p/11204497.html
Copyright © 2011-2022 走看看