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学习笔记-详解in运算符
Sep 13 Javascript
JS修改css样式style浅谈
May 06 Javascript
javascript动态添加、修改、删除对象的属性与方法详解
Jan 27 Javascript
js动态创建上传表单通过iframe模拟Ajax实现无刷新
Feb 20 Javascript
对Js OOP编程 创建对象的一些全面理解
Jul 26 Javascript
BootStrop前端框架入门教程详解
Dec 25 Javascript
js实现拖拽功能
Mar 01 Javascript
jQuery实现带右侧索引功能的通讯录示例【附源码下载】
Apr 17 jQuery
微信小程序实践之动态控制组件的显示/隐藏功能
Jul 18 Javascript
layui 弹出删除确认界面的实例
Sep 06 Javascript
微信小程序音乐播放器开发
Nov 20 Javascript
Vue过渡效果之CSS过渡详解(结合transition,animation,animate.css)
Feb 05 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正则过滤html标签、空格、换行符的代码(附说明)
2010/10/25 PHP
php获得文件夹下所有文件的递归算法的简单实例
2016/11/01 PHP
select组合框option的捕捉实例代码
2008/09/30 Javascript
jQuery 表单验证扩展代码(二)
2010/10/20 Javascript
JS焦点图切换,上下翻转
2011/05/12 Javascript
用JS提交参数创建form表单在FireFox中遇到的问题
2013/01/16 Javascript
探讨JavaScript中声明全局变量三种方式的异同
2013/12/03 Javascript
AspNet中使用JQuery上传插件Uploadify详解
2015/05/20 Javascript
Jquery左右滑动插件之实现超级炫酷动画效果附源码下载
2015/12/02 Javascript
浅谈JavaScript for循环 闭包
2016/06/22 Javascript
浅谈jQuery中的checkbox问题
2016/08/10 Javascript
JavaScript中错误正确处理方式小结你用对了吗
2017/10/10 Javascript
Thinkjs3新手入门之添加一个新的页面
2017/12/06 Javascript
js原生实现移动端手指滑动轮播图效果的示例
2018/01/02 Javascript
JavaScript高级函数应用之分时函数实例分析
2018/08/03 Javascript
利用Vue构造器创建Form组件的通用解决方法
2018/12/03 Javascript
使用webpack搭建vue项目实现脚手架功能
2019/03/15 Javascript
js getBoundingClientRect使用方法详解
2019/07/17 Javascript
React 条件渲染最佳实践小结(7种)
2020/09/27 Javascript
Python递归遍历列表及输出的实现方法
2015/05/19 Python
Mac 上切换Python多版本
2017/06/17 Python
简单了解python高阶函数map/reduce
2019/06/28 Python
django中间键重定向实例方法
2019/11/10 Python
使用python写一个自动浏览文章的脚本实例
2019/12/05 Python
Python字典底层实现原理详解
2019/12/18 Python
简单了解python关键字global nonlocal区别
2020/09/21 Python
python爬虫基础之urllib的使用
2020/12/31 Python
Python调用SMTP服务自动发送Email的实现步骤
2021/02/07 Python
浅谈css3新单位vw、vh、vmin、vmax的使用详解
2017/12/01 HTML / CSS
html5实现多图片预览上传及点击可拖拽控件
2018/03/15 HTML / CSS
销售工作人员的自我评价分享
2013/11/10 职场文书
美德好少年事迹材料
2014/01/19 职场文书
2014年母亲节演讲稿范文
2014/05/07 职场文书
2015年办公室文员工作总结
2015/04/24 职场文书
工作收入证明模板
2015/06/12 职场文书
MySQL中order by的执行过程
2022/06/05 MySQL