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 sortable效果 代码有错但值得看看
Nov 05 Javascript
jQuery中的bind绑定事件与文本框改变事件的临时解决方法
Aug 13 Javascript
JavaScript判断访问的来源是手机还是电脑,用的哪种浏览器
Dec 12 Javascript
jQuery scrollFix滚动定位插件
Apr 01 Javascript
js实现漂浮回顶部按钮实例
May 06 Javascript
JavaScript事件处理的方式(三种)
Apr 26 Javascript
用JS动态改变表单form里的action值属性的两种方法
May 25 Javascript
JS实现旋转木马式图片轮播效果
Jan 18 Javascript
基于JavaScript实现瀑布流效果
Mar 29 Javascript
Bootstrap实现的标签页内容切换显示效果示例
May 25 Javascript
ES6关于Promise的用法详解
May 07 Javascript
vant 时间选择器--开始时间和结束时间实例
Nov 04 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环境配置之CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI比较?
2011/10/17 PHP
解决PHP4.0 和 PHP5.0类构造函数的兼容问题
2013/08/01 PHP
PHP6 中可能会出现的新特性预览
2014/04/04 PHP
PHP给源代码加密的几种方法汇总(推荐)
2018/02/06 PHP
javascript AutoScroller 函数类
2009/05/29 Javascript
jquery blockUI 遮罩不能消失与不能提交的解决方法
2011/09/17 Javascript
JavaScript 更严格的相等 [译]
2012/09/20 Javascript
js实现动态改变字体大小代码
2014/01/02 Javascript
JavaScript获取服务器端时间的方法
2016/11/29 Javascript
JS实现点击复选框变更DIV显示状态的示例代码
2017/12/18 Javascript
浅谈react性能优化的方法
2018/09/05 Javascript
jquery判断滚动条距离顶部的距离方法
2018/09/05 jQuery
5分钟快速掌握JS中var、let和const的异同
2018/09/19 Javascript
vue-cli history模式实现tomcat部署报404的解决方式
2019/09/06 Javascript
vue实现购物车选择功能
2020/01/10 Javascript
vue+koa2搭建mock数据环境的详细教程
2020/05/18 Javascript
Vue Render函数原理及代码实例解析
2020/07/30 Javascript
Vue-router编程式导航的两种实现代码
2021/03/04 Vue.js
[50:12]EG vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python学习之编写查询ip程序
2016/02/27 Python
Python 实现文件读写、坐标寻址、查找替换功能
2019/09/11 Python
详解css3中 text-fill-color属性
2019/07/08 HTML / CSS
HTML5资源预加载(Link prefetch)详细介绍(给你的网页加速)
2014/05/07 HTML / CSS
移动端Html5中百度地图的点击事件
2019/01/31 HTML / CSS
Omio葡萄牙:全欧洲低价大巴、火车和航班搜索和比价
2019/02/09 全球购物
高级销售员求职信
2013/10/25 职场文书
经典大学生求职信范文
2014/01/06 职场文书
低碳环保口号
2014/06/12 职场文书
安全生产年活动总结
2014/08/29 职场文书
工作表扬信
2015/01/17 职场文书
劳动仲裁撤诉申请书
2015/05/18 职场文书
2016领导干部廉洁自律心得体会
2016/01/13 职场文书
2016应届毕业生就业指导课心得体会
2016/01/15 职场文书
2016年优秀党务工作者先进事迹材料
2016/02/29 职场文书
Windows11里微软已经将驱动程序安装位置A盘删除
2021/11/21 数码科技
python数字图像处理数据类型及颜色空间转换
2022/06/28 Python