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 读取和设置文档元素的样式属性
Apr 14 Javascript
js 内存释放问题
Apr 25 Javascript
jquery异步循环获取功能实现代码
Sep 19 Javascript
用JQuery实现表格隔行变色和突出显示当前行的代码
Feb 10 Javascript
js解析与序列化json数据(二)序列化探讨
Feb 01 Javascript
JQuery 在线引用及测试引用是否成功
Jun 24 Javascript
使用JQuery FancyBox插件实现图片展示特效
Nov 16 Javascript
如何利用Promises编写更优雅的JavaScript代码
May 17 Javascript
微信小程序 底部导航栏目开发资料
Dec 05 Javascript
详解vue-cli与webpack结合如何处理静态资源
Sep 19 Javascript
JavaScript canvas实现围绕旋转动画
Nov 18 Javascript
Vuex 模块化使用详解
Jul 31 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
PHP页面间参数传递的四种方法详解
2013/06/09 PHP
使用Linux五年积累的一些经验技巧
2013/06/20 PHP
php判断字符串在另一个字符串位置的方法
2014/02/27 PHP
php中的curl使用入门教程和常见用法实例
2014/04/10 PHP
PHP中ini_set与ini_get用法实例
2014/11/04 PHP
PHP比较运算符的详细介绍
2015/09/29 PHP
yii2.0实现pathinfo的形式访问的配置方法
2016/04/06 PHP
Windows 下安装 swoole 图文教程(php)
2017/06/05 PHP
在网页中屏蔽快捷键
2006/09/06 Javascript
js作用域及作用域链概念理解及使用
2013/04/15 Javascript
使用JQuery库提供的扩展功能实现自定义方法
2014/09/09 Javascript
js表单提交和submit提交的区别实例分析
2015/12/10 Javascript
基于JavaScript实现TAB标签效果
2016/01/12 Javascript
简单的jQuery banner图片轮播实例代码
2016/03/04 Javascript
基于javascript编写简单日历
2016/05/02 Javascript
jQuery筛选数组之grep、each、inArray、map的用法及遍历json对象
2016/06/20 Javascript
js/jquery控制页面动态加载数据 滑动滚动条自动加载事件的方法
2017/02/08 Javascript
从对象列表中获取一个对象的方法,依据关键字和值
2017/09/20 Javascript
JavaScript代码实现txt文件的上传预览功能
2018/03/27 Javascript
如何用JavaScript实现功能齐全的单链表详解
2019/02/11 Javascript
layui checkbox默认选中,获取选中值,清空所有选中项的例子
2019/09/02 Javascript
[49:35]2018DOTA2亚洲邀请赛3月30日 小组赛A组 KG VS TNC
2018/03/31 DOTA
Django 登陆验证码和中间件的实现
2018/08/17 Python
Python全局变量与局部变量区别及用法分析
2018/09/03 Python
基于Python实现用户管理系统
2019/02/26 Python
linux 下selenium chrome使用详解
2020/04/02 Python
纯CSS3实现的井字棋游戏
2020/11/25 HTML / CSS
video实现有声音自动播放的实现方法
2020/05/20 HTML / CSS
一套比较完整的软件测试人员面试题
2012/05/13 面试题
CSS代码检查工具stylelint的使用方法详解
2021/03/27 HTML / CSS
服装设计专业毕业生推荐信
2013/11/09 职场文书
上班玩手机检讨书
2014/02/17 职场文书
退休教师欢送会主持词
2014/03/31 职场文书
管理标语大全
2014/06/24 职场文书
党员干部学习十八届五中全会精神心得体会
2016/01/05 职场文书
教你怎么用Python监控愉客行车程
2021/04/29 Python