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 相关文章推荐
谷歌浏览器 insertCell与appendChild的区别
Feb 12 Javascript
jsonp原理及使用
Oct 28 Javascript
用jquery仿做发微博功能示例
Apr 18 Javascript
浅谈JavaScript正则表达式分组匹配
Apr 10 Javascript
js兼容火狐获取图片宽和高的方法
May 21 Javascript
简单理解vue中el、template、replace元素
Oct 27 Javascript
ionic中列表项增加和删除的实现方法
Jan 22 Javascript
js点击时关闭该范围下拉菜单之外的菜单方法
Jan 11 Javascript
JavaScript学习笔记之数组基本操作示例
Jan 09 Javascript
mui js控制开关状态、修改switch开关的值方法
Sep 03 Javascript
ES6中Set和Map用法实例详解
Mar 02 Javascript
antd Form组件方法getFieldsValue获取自定义组件的值操作
Oct 29 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
SWFUpload与CI不能正确上传识别文件MIME类型解决方法分享
2011/04/18 PHP
PHP 数据结构 算法 三元组 Triplet
2011/07/02 PHP
php实现简单洗牌算法
2013/06/18 PHP
解析MySql与Java的时间类型
2013/06/22 PHP
PHP中strtr字符串替换用法详解
2014/11/26 PHP
thinkphp项目部署到Linux服务器上报错“模板不存在”如何解决
2016/04/27 PHP
用PHP写的一个冒泡排序法的函数简单实例
2016/05/26 PHP
Gambit vs ForZe BO3 第二场 2.13
2021/03/10 DOTA
jQuery News Ticker 基于jQuery的即时新闻行情展示插件
2011/11/05 Javascript
Jquery实现三层遍历删除功能代码
2013/04/23 Javascript
深入解析JavaScript中的变量作用域
2013/12/06 Javascript
Javascript的严格模式strict mode详细介绍
2014/06/06 Javascript
在linux中使用包管理器安装node.js
2015/03/13 Javascript
JavaScript判断数组是否包含指定元素的方法
2015/07/01 Javascript
手机移动端实现 jquery和HTML5 Canvas的幸运大奖盘特效
2016/12/06 Javascript
ES6学习之变量的解构赋值
2017/02/12 Javascript
详解JavaScript中js对象与JSON格式字符串的相互转换
2017/02/14 Javascript
JS检测数组类型的方法小结
2017/03/14 Javascript
12条写出高质量JS代码的方法
2018/01/07 Javascript
微信运维交互机器人的示例代码
2018/11/12 Javascript
ES6中Set和Map数据结构,Map与其它数据结构互相转换操作实例详解
2019/02/28 Javascript
详解在Vue.js编写更好的v-for循环的6种技巧
2020/04/14 Javascript
[02:43]2018DOTA2亚洲邀请赛主赛事首日TOP5
2018/04/04 DOTA
Python实现周期性抓取网页内容的方法
2015/11/04 Python
Python list操作用法总结
2015/11/10 Python
python实现下载整个ftp目录的方法
2017/01/17 Python
在Windows中设置Python环境变量的实例讲解
2018/04/28 Python
python读取txt文件,去掉空格计算每行长度的方法
2018/12/20 Python
python3实现名片管理系统(控制台版)
2020/11/29 Python
Pandas直接读取sql脚本的方法
2021/01/21 Python
2014年英语教学工作总结
2014/12/17 职场文书
德能勤绩廉个人总结
2015/02/14 职场文书
表扬信格式模板
2015/05/05 职场文书
活动新闻稿范文
2015/07/17 职场文书
Django使用redis配置缓存的方法
2021/06/01 Redis
spring boot中nativeQuery的用法
2021/07/26 Java/Android