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 相关文章推荐
JS 实现导航栏悬停效果(续2)
Sep 24 Javascript
jquery遍历select元素(实例讲解)
Dec 31 Javascript
javascript操作referer详细解析
Mar 10 Javascript
node.js入门教程迷你书、node.js入门web应用开发完全示例
Apr 06 Javascript
js中string转int把String类型转化成int类型
Aug 13 Javascript
jquery实现的树形目录实例
Jun 26 Javascript
JS基于FileSystemObject创建一个指定路径的TXT文本文件
Aug 05 Javascript
完美实现八种js焦点轮播图(下篇)
Apr 20 Javascript
详解JavaScript 浮点数运算的精度问题
Jul 23 Javascript
js神秘的电报密码 哈弗曼编码实现
Sep 10 Javascript
jquery弹窗时禁止body滚动条滚动的例子
Sep 21 jQuery
完美解决vue 中多个echarts图表自适应的问题
Jul 19 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
PL-880隐藏功能
2021/03/01 无线电
PHP积分兑换接口实例
2015/02/09 PHP
php浏览历史记录的方法
2015/03/10 PHP
Prototype 学习 Prototype对象
2009/07/12 Javascript
日期处理的js库(迷你版)--自建js库总结
2011/11/21 Javascript
JavaScript代码复用模式实例分析
2012/12/02 Javascript
IE、FF浏览器下修改标签透明度
2014/01/28 Javascript
javascript if条件判断方法小结
2014/05/17 Javascript
javascript获取当前鼠标坐标的方法
2015/01/10 Javascript
jQuery控制frames及frame页面JS的方法
2016/03/08 Javascript
谈一谈jQuery核心架构设计
2016/03/28 Javascript
解决微信浏览器Javascript无法使用window.location.reload()刷新页面
2016/06/21 Javascript
JS简单设置下拉选择框默认值的方法
2016/08/20 Javascript
vue.js实现只弹一次弹框
2018/01/29 Javascript
layui问题之模拟select点击事件的实例讲解
2018/08/15 Javascript
vue+Element-ui实现分页效果实例代码详解
2018/12/10 Javascript
Layui 动态禁止select下拉的例子
2019/09/03 Javascript
layui 实现表格某一列显示图标
2019/09/19 Javascript
vue 实现 rem 布局或vw 布局的方法
2019/11/13 Javascript
Python 使用PyQt5 完成选择文件或目录的对话框方法
2019/06/27 Python
django settings.py 配置文件及介绍
2019/07/15 Python
OpenCV里的imshow()和Matplotlib.pyplot的imshow()的实现
2019/11/25 Python
np.random.seed() 的使用详解
2020/01/14 Python
Pytorch 实现数据集自定义读取
2020/01/18 Python
Python递归调用实现数字累加的代码
2020/02/25 Python
详解CSS3的perspective属性设置3D变换距离的方法
2016/05/23 HTML / CSS
css3动画鼠标放上图片逐渐变大鼠标离开图片逐渐缩小效果
2021/01/27 HTML / CSS
使用phonegap克隆和删除联系人的实现方法
2017/03/31 HTML / CSS
世界著名的顶级牛排:Omaha Steak(奥马哈牛排)
2016/09/20 全球购物
Java语言的优势
2015/01/10 面试题
网上书店创业计划书
2014/01/12 职场文书
《特殊的葬礼》教学反思
2014/04/27 职场文书
会计人员演讲稿
2014/09/11 职场文书
2014感恩节演讲稿大全
2014/10/11 职场文书
四风批评与自我批评范文
2014/10/14 职场文书
2015年社区流动人口工作总结
2015/05/12 职场文书