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 相关文章推荐
B/S开发中常用javaScript技术与代码
Mar 09 Javascript
jquery多浏览器捕捉回车事件代码
Jun 22 Javascript
有关JavaScript的10个怪癖和秘密分享
Aug 28 Javascript
javascript中的document.open()方法使用介绍
Oct 09 Javascript
js hover 定时器(实例代码)
Nov 12 Javascript
jQuery中的Deferred和promise 的区别
Apr 03 Javascript
利用JQuery阻止事件冒泡
Dec 01 Javascript
浅谈Vue组件及组件的注册方法
Aug 24 Javascript
简单两步使用node发送qq邮件的方法
Mar 01 Javascript
layui加载数据显示loading加载完成loading消失的实例代码
Sep 23 Javascript
手把手带你入门微信小程序新框架Kbone的使用
Feb 25 Javascript
如何vue使用el-table遍历循环表头和表体数据
Apr 26 Vue.js
微信小程序返回上一页传参并刷新过程解析
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
PHP版微信公众平台红包API
2015/04/02 PHP
thinkphp框架类库扩展操作示例
2019/11/26 PHP
windows系统下简单nodejs安装及环境配置
2013/01/08 NodeJs
jQuery截取指定长度字符串代码
2014/08/21 Javascript
JavaScript中变量声明有var和没var的区别示例介绍
2014/09/15 Javascript
JS实现控制表格行内容垂直对齐的方法
2015/03/30 Javascript
requireJS使用指南
2016/04/27 Javascript
Bootstrap Paginator分页插件使用方法详解
2016/05/30 Javascript
微信扫码支付零云插件版实例详解
2017/04/26 Javascript
jQuery实现下拉菜单的实例代码
2017/06/19 jQuery
JS中常用的消息框总结
2018/02/24 Javascript
vue中使用iview自定义验证关键词输入框问题及解决方法
2018/03/26 Javascript
解决vue项目中type=”file“ change事件只执行一次的问题
2018/05/16 Javascript
p5.js临摹旋转爱心
2019/10/23 Javascript
[05:45]Ti4观战指南(下)
2014/07/07 DOTA
[37:35]DOTA2上海特级锦标赛A组资格赛#1 Secret VS MVP.Phx第二局
2016/02/25 DOTA
[57:59]EG vs Secret 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
[52:02]DOTA2-DPC中国联赛 正赛 Phoenix vs Dragon BO3 第二场 2月26日
2021/03/11 DOTA
线程和进程的区别及Python代码实例
2015/02/04 Python
使用70行Python代码实现一个递归下降解析器的教程
2015/04/17 Python
Python 含参构造函数实例详解
2017/05/25 Python
Python随机生成均匀分布在单位圆内的点代码示例
2017/11/13 Python
解决django同步数据库的时候app models表没有成功创建的问题
2019/08/09 Python
利用python计算时间差(返回天数)
2019/09/07 Python
python 通过文件夹导入包的操作
2020/06/01 Python
用CSS禁用输入法(CSS3 UI规范)实例解析
2012/12/04 HTML / CSS
美国祛痘、抗衰老药妆品牌:Murad
2016/08/27 全球购物
蒙蒂塞罗商店:Monticello Shop
2018/11/25 全球购物
Sql面试题
2013/03/20 面试题
银行毕业实习自我鉴定
2013/09/19 职场文书
厨师岗位职责
2013/11/12 职场文书
美容院经理岗位职责
2014/04/03 职场文书
学校春季防火方案
2014/06/08 职场文书
小学数学课题方案
2014/06/15 职场文书
美容院员工规章制度
2015/08/05 职场文书
详解CSS3.0(Cascading Style Sheet) 层叠级联样式表
2021/07/16 HTML / CSS