• touch多点触摸事件


    touch--单点

    targetTouches、 changeTouches

    多点:

    targetTouches--当前物体上的手指数

    *不同物体上的手指不会互相干扰

    不需要做多点触摸的时候---平均值:

    x=∑ 所有手指x /n
    y=∑ 所有手指y /n

    手势识别:
    1.
    2.

    --------------------------------------------------------------------------------

    多点触摸:
    1.避免影响——消除干扰
    平均坐标
    2.需要多点——手势
    i.旋转 后角度-前角度
    ii.缩放 后距离/前距离

    --------------------------------------------------------------------------------

    Math.atan(b/a);
    Math.atan2(b, a);

    --------------------------------------------------------------------------------

    角度:360
    弧度:2·PI

    360角度=2PI弧度
    1角度=PI/180弧度
    n角度=n*PI/180弧度

    2PI弧度=360角度
    1弧度=180/PI角度
    n弧度=n*180/PI角度

    --------------------------------------------------------------------------------

    1.思路:
    旋转 角度-角度
    缩放 距离/距离
    2.弧度:
    弧度 换算 角度

    --------------------------------------------------------------------------------

    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=no">
        <title></title>
        <style media="screen">
        body {height:2000px;}
        .box {200px; height:200px; background:#CCC; border:1px solid black; position:absolute; line-height:200px; text-align:center; font-size:40px; left:50%; top:150px; margin-left:-100px; transform: rotate(0deg)}
        </style>
        <script>
        function calcAng(touch1, touch2){
          let x=touch1.clientX-touch2.clientX;
          let y=touch1.clientY-touch2.clientY;
    
          return Math.atan2(y, x)*180/Math.PI;
        }
    
        window.onload=function (){
          let oBox=document.getElementsByClassName('box')[0];
    
          let ang1,ang2;
          let ang=0,old_ang;
    
          document.addEventListener('touchstart', function (ev){
            if(ev.targetTouches.length>=2){
              ang1=calcAng(ev.targetTouches[0], ev.targetTouches[1]);
              old_ang=ang;
            }
          }, false);
    
          document.addEventListener('touchmove', function (ev){
            if(ev.targetTouches.length>=2){
              ang2=calcAng(ev.targetTouches[0], ev.targetTouches[1]);
    
              ang=old_ang+ang2-ang1;
    
              oBox.style.transform=`rotate(${ang}deg)`;
            }
          }, false);
        };
        </script>
      </head>
      <body>
        <input type="text" name="" value="">
        <input type="button" value="按钮" onclick="document.querySelector('.box').style.background='yellow';">
        <div class="box">asdfasdf</div>
      </body>
    </html>

     缩放

    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=no">
        <title></title>
        <style media="screen">
        body {height:2000px;}
        .box {200px; height:200px; background:#CCC; border:1px solid black; position:absolute; line-height:200px; text-align:center; font-size:40px; left:50%; top:150px; margin-left:-100px; transform:scale(1);}
        </style>
        <script>
        function calcDistance(touch1, touch2){
          return Math.sqrt(Math.pow(touch1.clientX-touch2.clientX, 2), Math.pow(touch1.clientY-touch2.clientY, 2));
        }
        window.onload=function (){
          let oBox=document.getElementsByClassName('box')[0];
    
          let dis1,dis2;
          let scale=1.0,old_scale;
    
          document.addEventListener('touchstart', function (ev){
            if(ev.targetTouches.length>=2){
              dis1=calcDistance(ev.targetTouches[0], ev.targetTouches[1]);
    
              old_scale=scale;
            }
          }, false);
    
          document.addEventListener('touchmove', function (ev){
            if(ev.targetTouches.length>=2){
              dis2=calcDistance(ev.targetTouches[0], ev.targetTouches[1]);
    
              scale=old_scale*dis2/dis1;
    
              oBox.style.transform=`scale(${scale})`;
            }
          }, false);
        };
        </script>
      </head>
      <body>
        <div class="box">asdfasdf</div>
      </body>
    </html>
  • 相关阅读:
    declare set声明注意
    Winform 的dadagridview控件的修改操作
    VS2010,VS2008,VS2005;工程之间的转换
    C#程序跨平台?
    上网黑色护眼,设置浏览器黑色风格
    AutoCompleteSource从文件里读取自动填充内容
    两个checkbox的控件控制操作只能选其一
    《博客园精华集CLR/C#分册》第三轮筛选结果 转载
    TransactSQL 示例 查询某个数据库内的所有表的记录行数及其总和
    EF 4.1中内部经常提交的 exec sp_reset_connection 的用途原来是为了重用池中的连接
  • 原文地址:https://www.cnblogs.com/hss-blog/p/9774325.html
Copyright © 2020-2023  润新知