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 相关文章推荐
动态控制Table的js代码
Mar 07 Javascript
Add a Formatted Table to a Word Document
Jun 15 Javascript
js获取url参数代码实例分享(JS操作URL)
Dec 13 Javascript
JS实现控制表格单元格垂直对齐的方法
Mar 30 Javascript
JS实现带鼠标效果的头像及文章列表代码
Sep 27 Javascript
Javascript生成全局唯一标识符(GUID,UUID)的方法
Feb 27 Javascript
jquery实现页面常用的返回顶部效果
Mar 04 Javascript
JavaScript使用delete删除数组元素用法示例【数组长度不变】
Jan 17 Javascript
基于jQuery对象和DOM对象和字符串之间的转化实例
Aug 08 jQuery
layui中layer前端组件实现图片显示功能的方法分析
Oct 13 Javascript
详解基于Vue,Nginx的前后端不分离部署教程
Dec 04 Javascript
JavaScript实现拖拽和缩放效果
Aug 24 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
一条久听不愿放下的DIY森海MX500,三言两语话神奇
2021/03/02 无线电
一个目录遍历函数
2006/10/09 PHP
php新建文件自动编号的思路与实现
2011/06/27 PHP
php的webservice的wsdl的XML无法显示问题的解决方法
2014/03/11 PHP
PHP+HTML+JavaScript+Css实现简单爬虫开发
2016/03/28 PHP
PHP的Yii框架中创建视图和渲染视图的方法详解
2016/03/29 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
2019/11/26 PHP
gearman中任务的优先级和返回状态实例分析
2020/02/27 PHP
js常见表单应用技巧
2008/01/09 Javascript
基于jquery实现图片广告轮换效果代码
2011/07/07 Javascript
修改file按钮的默认样式实现代码
2013/04/23 Javascript
Jquery同辈元素选中/未选中效果的实例代码
2013/08/01 Javascript
jQuery中before()方法用法实例
2014/12/25 Javascript
JavaScript限定图片显示大小的方法
2015/03/11 Javascript
莱鸟介绍window.print()方法
2016/01/06 Javascript
js获取鼠标点击的对象,点击另一个按钮删除该对象的实现代码
2016/05/13 Javascript
JavaScript禁止用户多次提交的两种方法
2016/07/24 Javascript
浅谈JavaScript 中有关时间对象的方法
2016/08/15 Javascript
AngularJs 国际化(I18n/L10n)详解
2016/09/01 Javascript
Angular ng-class详解及实例代码
2016/09/19 Javascript
Swiper实现轮播图效果
2017/07/03 Javascript
在vue项目中正确使用iconfont的方法
2018/09/28 Javascript
实例分析Array.from(arr)与[...arr]到底有何不同
2019/04/09 Javascript
python使用paramiko模块实现ssh远程登陆上传文件并执行
2014/01/27 Python
MySQLdb ImportError: libmysqlclient.so.18解决方法
2014/08/21 Python
使用httplib模块来制作Python下HTTP客户端的方法
2015/06/19 Python
使用Python写CUDA程序的方法
2017/03/27 Python
windows下python安装小白入门教程
2018/09/18 Python
python实现字符串加密成纯数字
2019/03/19 Python
使用Python开发个京东上抢口罩的小实例(仅作技术研究学习使用)
2020/03/10 Python
Python tkinter实现简单加法计算器代码实例
2020/05/13 Python
python3 中时间戳、时间、日期的转换和加减操作
2020/07/14 Python
将一个文本文件的内容按倒序打印出来
2015/01/05 面试题
农行实习自我鉴定
2013/09/22 职场文书
理财学专业自荐书
2014/06/28 职场文书
教师继续教育反思周记
2015/06/25 职场文书