touch.js 拖动、缩放、旋转 (鼠标手势)功能代码


Posted in Javascript onFebruary 04, 2017

可以实现手势操作:拖动、缩放、旋转。封装好的脚本方法是这样的:

var cat = window.cat || {}; 
cat.touchjs = { 
  left: 0, 
  top: 0, 
  scaleVal: 1,  //缩放 
  rotateVal: 0,  //旋转 
  curStatus: 0,  //记录当前手势的状态, 0:拖动, 1:缩放, 2:旋转 
  //初始化 
  init: function ($targetObj, callback) { 
    touch.on($targetObj, 'touchstart', function (ev) { 
      cat.touchjs.curStatus = 0; 
      ev.preventDefault();//阻止默认事件 
    }); 
    if (!window.localStorage.cat_touchjs_data) 
      callback(0, 0, 1, 0); 
    else { 
      var jsonObj = JSON.parse(window.localStorage.cat_touchjs_data); 
      cat.touchjs.left = parseFloat(jsonObj.left), cat.touchjs.top = parseFloat(jsonObj.top), cat.touchjs.scaleVal = parseFloat(jsonObj.scale), cat.touchjs.rotateVal = parseFloat(jsonObj.rotate); 
      callback(cat.touchjs.left, cat.touchjs.top, cat.touchjs.scaleVal, cat.touchjs.rotateVal); 
    } 
  }, 
  //拖动 
  drag: function ($targetObj, callback) { 
    touch.on($targetObj, 'drag', function (ev) { 
      $targetObj.css("left", cat.touchjs.left + ev.x).css("top", cat.touchjs.top + ev.y); 
    }); 
    touch.on($targetObj, 'dragend', function (ev) { 
      cat.touchjs.left = cat.touchjs.left + ev.x; 
      cat.touchjs.top = cat.touchjs.top + ev.y; 
      callback(cat.touchjs.left, cat.touchjs.top); 
    }); 
  }, 
  //缩放 
  scale: function ($targetObj, callback) { 
    var initialScale = cat.touchjs.scaleVal || 1; 
    var currentScale; 
    touch.on($targetObj, 'pinch', function (ev) { 
      if (cat.touchjs.curStatus == 2) { 
        return; 
      } 
      cat.touchjs.curStatus = 1; 
      currentScale = ev.scale - 1; 
      currentScale = initialScale + currentScale; 
      cat.touchjs.scaleVal = currentScale; 
      var transformStyle = 'scale(' + cat.touchjs.scaleVal + ') rotate(' + cat.touchjs.rotateVal + 'deg)'; 
      $targetObj.css("transform", transformStyle).css("-webkit-transform", transformStyle); 
      callback(cat.touchjs.scaleVal); 
    }); 
    touch.on($targetObj, 'pinchend', function (ev) { 
      if (cat.touchjs.curStatus == 2) { 
        return; 
      } 
      initialScale = currentScale; 
      cat.touchjs.scaleVal = currentScale; 
      callback(cat.touchjs.scaleVal); 
    }); 
  }, 
  //旋转 
  rotate: function ($targetObj, callback) { 
    var angle = cat.touchjs.rotateVal || 0; 
    touch.on($targetObj, 'rotate', function (ev) { 
      if (cat.touchjs.curStatus == 1) { 
        return; 
      } 
      cat.touchjs.curStatus = 2; 
      var totalAngle = angle + ev.rotation; 
      if (ev.fingerStatus === 'end') { 
        angle = angle + ev.rotation; 
      } 
      cat.touchjs.rotateVal = totalAngle; 
      var transformStyle = 'scale(' + cat.touchjs.scaleVal + ') rotate(' + cat.touchjs.rotateVal + 'deg)'; 
      $targetObj.css("transform", transformStyle).css("-webkit-transform", transformStyle); 
      $targetObj.attr('data-rotate', cat.touchjs.rotateVal); 
      callback(cat.touchjs.rotateVal); 
    }); 
  } 
};

html代码:

<div style="position:relative;width: 100%;height: 250px;overflow: hidden;border: 1px dashed #ff0000;"> 
 <img id="targetObj" style="position:relative;transform-origin:center" src="http://demo.somethingwhat.com/images/flower1.jpg" /> 
</div>

 js调用:

var $targetObj = $('#targetObj'); 
//初始化设置 
cat.touchjs.init($targetObj, function (left, top, scale, rotate) {}; 
//初始化拖动手势(不需要就注释掉) 
cat.touchjs.drag($targetObj, function (left, top) { }); 
//初始化缩放手势(不需要就注释掉) 
cat.touchjs.scale($targetObj, function (scale) { }); 
//初始化旋转手势(不需要就注释掉) 
cat.touchjs.rotate($targetObj, function (rotate) { });

以上所述是小编给大家介绍的touch.js 拖动、缩放、旋转 (鼠标手势)功能代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
一个可以随意添加多个序列的tag函数
Jul 21 Javascript
javascript Array数组对象的扩展函数代码
May 22 Javascript
用js来刷新当前页面保留参数的具体实现
Dec 23 Javascript
javascript中的事件代理初探
Mar 08 Javascript
javascript数据结构之二叉搜索树实现方法
Nov 25 Javascript
jquery 重写 ajax提交并判断权限后 使用load方法报错解决方法
Jan 19 Javascript
BootStrap中的table实现数据填充与分页应用小结
May 26 Javascript
AngularJS 实现JavaScript 动画效果详解
Sep 08 Javascript
react使用CSS实现react动画功能示例
May 18 Javascript
vue2.0 watch里面的 deep和immediate用法说明
Oct 30 Javascript
详解阿里Node.js技术文档之process模块学习指南
Jan 04 Javascript
vue2实现provide inject传递响应式
May 21 Vue.js
jQuery插件autocomplete使用详解
Feb 04 #Javascript
d3.js中冷门却实用的内置函数总结
Feb 04 #Javascript
原生js开发的日历插件
Feb 04 #Javascript
JS Select下拉框(支持输入模糊查询)
Feb 04 #Javascript
原生js实现打字动画游戏
Feb 04 #Javascript
js实现自定义路由
Feb 04 #Javascript
jQuery窗口拖动功能的实现代码
Feb 04 #Javascript
You might like
PHP查询MySQL大量数据的时候内存占用分析
2011/07/22 PHP
PHP 循环删除无限分类子节点的实现代码
2013/06/21 PHP
PHP制作3D扇形统计图以及对图片进行缩放操作实例
2014/10/23 PHP
PHP使用JSON和将json还原成数组
2015/02/12 PHP
分享10段PHP常用代码
2015/11/11 PHP
php实现基于pdo的事务处理方法示例
2017/07/21 PHP
用js实现控制内容的向上向下滚动效果
2007/06/26 Javascript
JavaScript获取GridView选择的行内容
2009/04/14 Javascript
jquery实现checkbox全选全不选的简单实例
2013/12/31 Javascript
用js+iframe形成页面的一种遮罩效果的具体实现
2013/12/31 Javascript
js浏览器本地存储store.js介绍及应用
2014/05/13 Javascript
node.js中的fs.createReadStream方法使用说明
2014/12/17 Javascript
javascript中call,apply,bind的用法对比分析
2015/02/12 Javascript
AngularJS 输入验证详解及实例代码
2016/07/28 Javascript
D3.js实现文本的换行详解
2016/10/14 Javascript
javascript中的后退和刷新实现方法
2016/11/10 Javascript
简单谈谈gulp-changed插件
2017/02/21 Javascript
Angular4 中常用的指令入门总结
2017/06/12 Javascript
JS去掉字符串末尾的标点符号及删除最后一个字符的方法
2017/10/24 Javascript
JS中的回调函数实例浅析
2018/03/21 Javascript
Vue resource三种请求格式和万能测试地址
2018/09/26 Javascript
详解nuxt路由鉴权(express模板)
2018/11/21 Javascript
JS获取本地地址及天气的方法实例小结
2019/05/10 Javascript
重学JS之显示强制类型转换详解
2019/06/30 Javascript
NodeJS多种创建WebSocket监听的方式(三种)
2020/06/04 NodeJs
Python Web框架Flask中使用百度云存储BCS实例
2015/02/08 Python
获取python运行输出的数据并解析存为dataFrame实例
2020/07/07 Python
土木工程应届生自荐信
2013/09/24 职场文书
大学生志愿者感言
2014/01/15 职场文书
副厂长岗位职责
2014/02/02 职场文书
操行评语大全
2014/04/30 职场文书
2014年财务工作自我评价
2014/09/23 职场文书
网络营销计划
2015/01/17 职场文书
教你如何使用Python下载B站视频的详细教程
2021/04/29 Python
Python趣味挑战之给幼儿园弟弟生成1000道算术题
2021/05/28 Python
Python+OpenCV实现在图像上绘制矩形
2022/03/21 Python