zoukankan      html  css  js  c++  java
  • 移动端js触摸touch详解(附带案例源码)

       移动端触摸滑动原理详解案例,实现过程通过添加DOM标签的触摸事件监听,并计算触摸距离,通过距离坐标计算触摸角度,最后通过触摸角度去判断往哪个方向触摸的。

    触摸的事件列表

    触摸的4个事件:

    touchstart      触摸屏幕上时触发  

    touchmove    触摸屏幕中滑动时触发  

    touchend       离开屏幕时触发  

    touchcancel    系统取消触摸事件的时候触发

    监听触摸后触摸事件会实现一个event对象,这个对象里面包括3个触摸函数列表。

    触摸事件里的3个函数:

    touches      屏幕上所有手指列表  

    targetTouches      在当前DOM标签上手指的列表

    changedTouches      涉及当前事件的手指的列表

    触摸函数的属性,用于获取坐标

    8个属性:

    clientX      触摸目标在浏览器中的x坐标 

    clientY      触摸目标在浏览器中的y坐标

    identifier      标识触摸的唯一ID。 

    pageX      触摸目标在当前DOM中的x坐标

    pageY      触摸目标在当前DOM中的y坐标

    screenX      触摸目标在屏幕中的x坐标

    screenY      触摸目标在屏幕中的y坐标

    target      触摸的DOM节点目标。

    Math.atan2()函数,计算角度的弧度值

    angel=Math.atan2(y,x)  

    x 指定点的 x 坐标

    y 指定点的 y 坐标

    angel是一个弧度值(可以比喻为直角三角形对角的角,其中 x 是邻边边长,而 y 是对边边长)

    atan2(x,y)*180/Math.PI   转换为角度

    触摸详细代码:

    <html>
    <head>
        <meta charset="utf-8"/>
        <title>touch test</title>
    </head>
    <body>
    <div id="box" style="100%;height:100%;border:1px solid red;"></div>
    <script>
        //定义变量,用于记录坐标和角度
        var startx,starty,movex,movey,endx,endy,nx,ny,angle;
        
        //开始触摸函数,event为触摸对象
        function touchs(event){
        
                //阻止浏览器默认滚动事件
            event.preventDefault();
            
            //获取DOM标签
            var box = document.getElementById('box');
            
            //通过if语句判断event.type执行了哪个触摸事件
            if(event.type=="touchstart"){
            
                 console.log('开始');
                 
                 //获取开始的位置数组的第一个触摸位置
                var touch = event.touches[0];
                
                 //获取第一个坐标的X轴
                startx = Math.floor(touch.pageX);
                
                //获取第一个坐标的X轴
                starty = Math.floor(touch.pageY);
                
                //触摸中的坐标获取
            }else if(event.type=="touchmove"){
            
                 console.log('滑动中');
                var touch = event.touches[0];
                movex = Math.floor(touch.pageX);
                movey = Math.floor(touch.pageY);
                
                //当手指离开屏幕或系统取消触摸事件的时候
            }else if(event.type == "touchend" || event.type == "touchcancel"){
            
                    //获取最后的坐标位置
                endx = Math.floor(event.changedTouches[0].pageX);
                endy = Math.floor(event.changedTouches[0].pageY);
                 console.log('结束');
                 
                 //获取开始位置和离开位置的距离
                nx = endx-startx;
                ny = endy-starty;
                
                //通过坐标计算角度公式 Math.atan2(y,x)*180/Math.PI
                angle = Math.atan2(ny, nx) * 180 / Math.PI;
                
                if(Math.abs(nx)<=1 ||Math.abs(ny)<=1){
                    return false;
                    console.log('滑动距离太小');
                }
                
                //通过滑动的角度判断触摸的方向
                if(angle<45 && angle>=-45){
                    alert('右滑动');
                    return false;
                }else if(angle<135 && angle>=45){
                    alert('下滑动');
                    return false;
                }else if((angle<=180 && angle>=135) || (angle>=-180 && angle<-135 )){
                    alert('左滑动');
                    return false;
                }else if(angle<=-45 && angle >=-135){
                    alert('上滑动');
                    return false;
                }
            }
        }
        
        //添加触摸事件的监听,并直行自定义触摸函数
        box.addEventListener('touchstart',touchs,false);
        box.addEventListener('touchmove',touchs,false);
        box.addEventListener('touchend',touchs,false);
        
    </script>
    </body>
    </html>
  • 相关阅读:
    无锁数据结构(Lock-Free Data Structures)
    Grouping Sets:CUBE和ROLLUP从句
    SQL Server里Grouping Sets的威力
    第18/24周 乐观并发控制(Optimistic Concurrency)
    SQL Server里PIVOT运算符的”红颜祸水“
    数据库收缩:NOTRUNCATE与TRUNCATEONLY
    在SQL Server里为什么我们需要更新锁
    SQL Server里的自旋锁介绍
    SQL Server里的闩锁介绍
    配置内存中OLTP文件组提高性能
  • 原文地址:https://www.cnblogs.com/lguow/p/11151594.html
Copyright © 2011-2022 走看看