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 相关文章推荐
9个JavaScript评级/投票插件
Jan 18 Javascript
js判断上传文件的类型和大小示例代码
Oct 18 Javascript
Node.js事件驱动
Jun 18 Javascript
手机端转盘抽奖代码分享
Sep 10 Javascript
基于JavaScript实现回到页面顶部动画代码
May 24 Javascript
Javascript小技能总结(推荐)
Jun 02 Javascript
AngularGauge 属性解析详解
Sep 06 Javascript
JavaScript严格模式详解
Jan 16 Javascript
AngularJS中ng-class用法实例分析
Jul 06 Javascript
浅谈Vue Element中Select下拉框选取值的问题
Mar 01 Javascript
JavaScript简单实现的仿微博留言功能示例
Jan 17 Javascript
React 并发功能体验(前端的并发模式)
Jul 01 Javascript
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
大师制作的中短波矿石收音机
2020/04/02 无线电
DedeCms模板安装/制作概述
2007/03/11 PHP
基于OpenCV的PHP图像人脸识别技术
2009/10/11 PHP
强烈声明: 不要使用(include/require)_once
2013/06/06 PHP
PHP和Mysql中转UTF8编码问题汇总
2015/10/10 PHP
学习php设计模式 php实现观察者模式(Observer)
2015/12/09 PHP
Yii2学习笔记之汉化yii设置表单的描述(属性标签attributeLabels)
2017/02/07 PHP
thinkphp5实现微信扫码支付
2019/12/23 PHP
JavaScript中去掉数组中的重复值的实现方法
2011/08/03 Javascript
中国地区三级联动下拉菜单效果分析
2012/11/15 Javascript
jquery自定义函数的多种方法
2014/01/09 Javascript
js判断横竖屏及禁止浏览器滑动条示例
2014/04/29 Javascript
JavaScript实现页面跳转的方式汇总
2016/05/16 Javascript
Angularjs实现带查找筛选功能的select下拉框示例代码
2016/10/04 Javascript
JavaScript下拉菜单功能实例代码
2017/03/01 Javascript
浅谈javascript的url参数parse和build函数
2017/03/04 Javascript
vue2单元测试环境搭建
2018/05/24 Javascript
JS实现键值对遍历json数组功能示例
2018/05/30 Javascript
angularJs中$http获取后台数据的实例讲解
2018/08/08 Javascript
一个Java程序猿眼中的前后端分离以及Vue.js入门(推荐)
2019/04/19 Javascript
layer弹出层倒计时关闭的实现方法
2019/09/27 Javascript
vant中的toast层级改变操作
2020/11/04 Javascript
[02:01]大师之路——DOTA2完美大师赛11月论剑上海
2017/11/06 DOTA
python实现list元素按关键字相加减的方法示例
2017/06/09 Python
Python 结巴分词实现关键词抽取分析
2017/10/21 Python
对numpy中的数组条件筛选功能详解
2018/07/02 Python
python递归全排列实现方法
2018/08/18 Python
python生成多个只含0,1元素的随机数组或列表的实例
2018/11/12 Python
python3实现zabbix告警推送钉钉的示例
2019/02/20 Python
Python多个装饰器的调用顺序实例解析
2020/05/22 Python
python通用数据库操作工具 pydbclib的使用简介
2020/12/21 Python
css3 中的新特性加强记忆详解
2016/04/16 HTML / CSS
银行职员工作失误检讨书
2014/10/14 职场文书
2015中秋节慰问信范文
2015/03/23 职场文书
煤矿百日安全活动总结
2015/05/07 职场文书
入党团支部推荐意见
2015/06/02 职场文书