JS实现移动端双指缩放和旋转方法


Posted in Javascript onDecember 13, 2019

js实现移动端双指缩放和旋转,具体代码如下所示:

var initHeading = 0;
  var rotation = 0;
  var lastTime;
  function setGesture(el){
    var obj={}; 
    var istouch=false;
    var start=[];
    el.addEventListener("touchstart",function(e){
      if(e.touches.length>=2){ //判断是否有两个点在屏幕上
        istouch=true;
        start=e.touches; //得到第一组两个点
        obj.gesturestart&&obj.gesturestart.call(el); //执行gesturestart方法
      };
    },false);
    document.addEventListener("touchmove",function(e){
      e.preventDefault();
      if(e.touches.length>=2&&istouch){
        var now=e.touches; //得到第二组两个点
        var scale=getDistance(now[0],now[1])/getDistance(start[0],start[1]); //得到缩放比例,getDistance是勾股定理的一个方法
        var rotation=getAngle(now[0],now[1])-getAngle(start[0],start[1]); //得到旋转角度,getAngle是得到夹角的一个方法
        e.scale=scale.toFixed(2);
        e.rotation=rotation.toFixed(2);
        obj.gesturemove&&obj.gesturemove.call(el,e); //执行gesturemove方法
      };
    },false);
    document.addEventListener("touchend",function(e){
      if(istouch){
        istouch=false;
        obj.gestureend&&obj.gestureend.call(el); //执行gestureend方法
      };
    },false);
    return obj;
  };
  function getDistance(p1, p2) {
    var x = p2.pageX - p1.pageX,
      y = p2.pageY - p1.pageY;
    return Math.sqrt((x * x) + (y * y));
  };
  function getAngle(p1, p2) {
    var x = p1.pageX - p2.pageX,
      y = p1.pageY- p2.pageY;
    return Math.atan2(y, x) * 180 / Math.PI;
  };
  var box=document.querySelector("#map3d");
  var boxGesture=setGesture(box); //得到一个对象
  boxGesture.gesturestart=function(){ //双指开始
    /*box.style.backgroundColor="yellow";*/
    initHeading = map25D._coreMap.map.position.heading;
  };

  boxGesture.gesturemove=function(e){ //双指移动
    rotation = parseInt(e.rotation);
    var time = new Date().getTime();
    var realRotation = changeAngle(rotation,time);
    if(realRotation){
    //TODO 得到旋转角度后想实现的功能
map25D._coreMap.map.position.setHeading(realRotation);
      map25D._coreMap.map.renderer.update();
    }
  };
  boxGesture.gestureend=function(){ //双指结束

  };
  //通过时间判断解决叠加初始方向
  var changeAngle = function (heading,newTime) {
    if((newTime - lastTime) < 2){
      return false;
    }
    lastTime = newTime;
    return (initHeading + heading)
  }

ps:下面看下js缩放网页比例

将当前网页缩放比变为200%

document.getElementsByTagName('body')[0].style.zoom=2

总结

以上所述是小编给大家介绍的JS实现移动端双指缩放和旋转方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
屏蔽Flash右键信息的js代码
Jan 17 Javascript
jquery一句话全选/取消全选
Mar 01 Javascript
script不刷新页面的联动前后代码
Sep 18 Javascript
Js 去掉字符串中的空格(实现代码)
Nov 19 Javascript
jQuery 获取/设置/删除DOM元素的属性以a元素为例
May 23 Javascript
jquery获取当前日期的方法
Jan 14 Javascript
浅析AMD CMD CommonJS规范--javascript模块化加载学习心得总结
Mar 16 Javascript
浅谈js中子页面父页面方法 变量相互调用
Aug 04 Javascript
JS中位置与大小的获取方法
Nov 22 Javascript
利用原生js实现html5小游戏之打砖块(附源码)
Jan 03 Javascript
微信小程序url传参写变量的方法
Aug 09 Javascript
手写Vue弹窗Modal的实现代码
Sep 11 Javascript
微信小程序返回上一页传参并刷新过程解析
Dec 13 #Javascript
Vue分页效果与购物车功能
Dec 13 #Javascript
如何在微信小程序中存setStorage
Dec 13 #Javascript
在微信小程序中使用mqtt服务的方法
Dec 13 #Javascript
微信小程序之左右布局的实现代码
Dec 13 #Javascript
vue实现输入一位数字转汉字功能
Dec 13 #Javascript
小程序登录之支付宝授权的实现示例
Dec 13 #Javascript
You might like
header中Content-Disposition的作用与使用方法
2012/06/13 PHP
php根据用户语言跳转相应网页
2015/11/04 PHP
php识别翻转iphone拍摄的颠倒图片
2018/05/17 PHP
PHP封装的数据库模型Model类完整示例【基于PDO】
2019/03/14 PHP
php时间戳转换代码详解
2019/08/04 PHP
asp(javascript)全角半角转换代码 dbc2sbc
2009/08/06 Javascript
javascript 定义新对象方法
2010/02/20 Javascript
JQuery 选择器、过滤器介绍
2011/02/14 Javascript
JavaScript中几种常见排序算法小结
2011/02/22 Javascript
Extjs优化(二)Form表单提交通用实现
2013/04/15 Javascript
javascript断点调试心得分享
2016/04/23 Javascript
Vue.js实现拖放效果的实例
2016/09/30 Javascript
基于jQuery实现左侧菜单栏可折叠功能
2016/12/27 Javascript
nodejs 十六进制字符串型数据与btye型数据相互转换
2018/07/30 NodeJs
基于vue 实现表单中password输入的显示与隐藏功能
2019/07/19 Javascript
小程序简单两栏瀑布流效果的实现
2019/12/18 Javascript
vue-cli 关闭热更新操作
2020/09/18 Javascript
vue-openlayers实现地图坐标弹框效果
2020/09/24 Javascript
Python抓取京东图书评论数据
2014/08/31 Python
Python3控制路由器——使用requests重启极路由.py
2016/05/11 Python
Python中判断子串存在的性能比较及分析总结
2019/06/23 Python
python自动发微信监控报警
2019/09/06 Python
Python3查找列表中重复元素的个数的3种方法详解
2020/02/13 Python
python数据库编程 Mysql实现通讯录
2020/03/27 Python
python开发前景如何
2020/06/11 Python
open_basedir restriction in effect. 原因与解决方法
2021/03/14 PHP
应聘面试自我评价
2014/01/24 职场文书
优秀高中生事迹材料
2014/02/11 职场文书
销售助理岗位职责
2014/02/21 职场文书
党员公开承诺书和承诺事项
2014/03/25 职场文书
企业授权委托书范本
2014/04/02 职场文书
助理政工师申报材料
2014/06/03 职场文书
农业生产宣传标语
2014/10/08 职场文书
爱心助学感谢信
2015/01/21 职场文书
教你如何使用Python开发一个钉钉群应答机器人
2021/06/21 Python
Python进程池与进程锁之语法学习
2022/04/11 Python