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 相关文章推荐
用Javascript实现UTF8编码转换成gb2312编码
Dec 22 Javascript
jQuery中使用了document和window哪些属性和方法小结
Sep 13 Javascript
通过Javascript将数据导出到外部Excel文档的函数代码
Jun 15 Javascript
js 调用本地exe的例子(支持IE内核的浏览器)
Dec 26 Javascript
探究Javascript模板引擎mustache.js使用方法
Jan 26 Javascript
JavaScript实现图片轮播组件代码示例
Nov 22 Javascript
js使用原型对象(prototype)需要注意的地方
Aug 28 Javascript
详解Vue+ElementUI从零开始搭建自己的网站(一、环境搭建)
Apr 30 Javascript
Vue安装浏览器开发工具的步骤详解
May 12 Javascript
layui table 表格模板按钮的实例代码
Sep 21 Javascript
jquery实现的放大镜效果示例
Feb 24 jQuery
ng-alain的sf如何自定义部件的流程
Jun 12 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
星际争霸任务指南——神族
2020/03/04 星际争霸
第一节--面向对象编程
2006/11/16 PHP
MySQL时间字段究竟使用INT还是DateTime的说明
2012/02/27 PHP
PHP遍历XML文档所有节点的方法
2015/03/12 PHP
PHP实现正则表达式分组捕获操作示例
2018/02/03 PHP
php中html_entity_decode实现HTML实体转义
2018/06/13 PHP
PHP工厂模式的日常使用
2019/03/20 PHP
JS加ASP二级域名转向的代码
2007/05/17 Javascript
语义化 H1 标签
2008/01/14 Javascript
一个判断email合法性的函数[非正则]
2008/12/09 Javascript
来自国外的14个图片放大编辑的jQuery插件整理
2010/10/20 Javascript
jQuery子属性过滤选择器用法分析
2015/02/10 Javascript
Node连接mysql数据库方法介绍
2017/02/07 Javascript
浅谈在fetch方法中添加header后遇到的预检请求问题
2017/08/31 Javascript
vue实现日历备忘录功能
2020/09/24 Javascript
vue 公共列表选择组件,引用Vant-UI的样式方式
2020/11/02 Javascript
Python入门_浅谈数据结构的4种基本类型
2017/05/16 Python
python获取url的返回信息方法
2018/12/17 Python
Python字典遍历操作实例小结
2019/03/05 Python
Python 如何操作 SQLite 数据库
2020/08/17 Python
sqlalchemy实现时间列自动更新教程
2020/09/02 Python
Python如何急速下载第三方库详解
2020/11/02 Python
程序集与命名空间有什么不同
2014/07/25 面试题
DELPHI面试题研发笔试试卷
2015/11/08 面试题
项目考察欢迎辞
2014/01/17 职场文书
农村文化活动总结
2014/08/28 职场文书
护士节活动总结
2014/08/29 职场文书
高一课前三分钟演讲稿
2014/09/13 职场文书
个人对照检查材料思想汇报
2014/09/26 职场文书
2014年客户经理工作总结
2014/11/20 职场文书
中学生勤俭节约倡议书
2015/04/29 职场文书
一篇文章弄懂MySQL查询语句的执行过程
2021/05/07 MySQL
用python删除文件夹中的重复图片(图片去重)
2021/05/12 Python
MySQL 发生同步延迟时Seconds_Behind_Master还为0的原因
2021/06/21 MySQL
Android存储中最基本的文件存储方式
2022/04/30 Java/Android
vue css 相对路径导入问题级踩坑记录
2022/06/05 Vue.js