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 相关文章推荐
jQuery实现平滑滚动页面到指定锚点链接的方法
Jul 15 Javascript
Windows下用PyCharm和Visual Studio开始Python编程
Oct 26 Javascript
jQuery模拟实现的select点击选择效果【附demo源码下载】
Nov 09 Javascript
浅谈Node.js:fs文件系统模块
Dec 08 Javascript
jQuery设计思想
Mar 07 Javascript
AngularJS点击添加样式、点击变色设置的实例代码
Jul 27 Javascript
浅谈angular4 ng-content 中隐藏的内容
Aug 18 Javascript
JavaScript伪数组用法实例分析
Dec 22 Javascript
Vue监听事件实现计数点击依次增加的方法
Sep 26 Javascript
基于js Canvas实现二次贝塞尔曲线
Dec 25 Javascript
微信小程序如何修改radio和checkbox的默认样式和图标
Jul 24 Javascript
JavaScript缓动动画函数的封装方法
Nov 25 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
windows下PHP APACHE MYSQ完整配置
2007/01/02 PHP
PHP学习之整理字符串
2011/04/17 PHP
win2003服务器使用WPS的COM组件的一些问题解决方法
2012/01/11 PHP
Zend的MVC机制使用分析(二)
2013/05/02 PHP
解决laravel5中auth用户登录其他页面获取不到登录信息的问题
2019/10/08 PHP
Prototype ObjectRange对象学习
2009/07/19 Javascript
jQuery自动切换/点击切换选项卡效果的小例子
2013/08/12 Javascript
js数值计算时使用parseInt进行数据类型转换(jquery)
2014/10/07 Javascript
JavaScript中的函数嵌套使用
2015/06/04 Javascript
jQuery+jsp实现省市县三级联动效果(附源码)
2015/12/03 Javascript
三个js循环的关键字示例(for与while)
2016/02/16 Javascript
使用vue.js开发时一些注意事项
2016/04/27 Javascript
JavaScript sort数组排序方法和自我实现排序方法小结
2016/06/06 Javascript
值得学习的bootstrap fileinput文件上传工具
2016/11/08 Javascript
详谈Angular路由与Nodejs路由的区别
2017/03/05 NodeJs
Angular使用 ng-img-max 调整浏览器中的图片的示例代码
2017/08/17 Javascript
jQuery轻量级表单模型验证插件
2018/10/15 jQuery
Vue 设置axios请求格式为form-data的操作步骤
2019/10/29 Javascript
Vuex实现购物车小功能
2020/08/17 Javascript
如何利用 JS 脚本实现网页全自动秒杀抢购功能
2020/10/12 Javascript
vue created钩子函数与mounted钩子函数的用法区别
2020/11/05 Javascript
vue使用require.context实现动态注册路由
2020/12/25 Vue.js
[01:08]DOTA2次级职业联赛 - Wings 战队宣传片
2014/12/01 DOTA
解决pandas .to_excel不覆盖已有sheet的问题
2018/12/10 Python
Python 循环终止语句的三种方法小结
2019/06/24 Python
python中使用you-get库批量在线下载bilibili视频的教程
2020/03/10 Python
Python 如何实现访问者模式
2020/07/28 Python
一文带你了解Python 四种常见基础爬虫方法介绍
2020/12/04 Python
年度考核自我鉴定
2013/11/09 职场文书
计算机维护专业推荐信
2014/02/27 职场文书
户外活动策划方案
2014/03/12 职场文书
社区优秀志愿者先进事迹
2014/05/09 职场文书
销售代理协议书
2014/09/30 职场文书
2014年社团工作总结范文
2014/11/27 职场文书
食品质检员岗位职责
2015/04/08 职场文书
java实现对Hadoop的操作
2021/07/01 Java/Android