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 相关文章推荐
baidu博客的编辑友情链接的新的层窗口!经典~支持【FF】
Feb 09 Javascript
jquery 选项卡效果 新手代码
Jul 08 Javascript
JQuery学习笔录 简单的JQuery
Apr 09 Javascript
原生JS操作网页给p元素添加onclick事件及表格隔行变色
Dec 01 Javascript
禁止IE用右键的JS代码
Dec 30 Javascript
jQuery中scrollTop()方法用法实例
Jan 16 Javascript
JS遍历页面所有对象属性及实现方法
Aug 01 Javascript
Jquery-data的三种用法
Apr 18 jQuery
jquery网页加载进度条的实现
Jun 01 jQuery
JavaScript数据结构与算法之二叉树遍历算法详解【先序、中序、后序】
Feb 21 Javascript
javascript数据类型中的一些小知识点(推荐)
Apr 18 Javascript
vue使用echarts实现水平柱形图实例
Sep 09 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
PHP连接access数据库
2008/03/27 PHP
那些年一起学习的PHP(三)
2012/03/22 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
2018/06/13 PHP
Yii2框架中一些折磨人的坑
2019/12/15 PHP
动态控制Table的js代码
2007/03/07 Javascript
javascript demo 基本技巧
2009/12/18 Javascript
通过jQuery打造支持汉字,拼音,英文快速定位查询的超级select插件
2010/06/18 Javascript
JQuery之拖拽插件实现代码
2011/04/14 Javascript
js限制文本框只能输入数字(正则表达式)
2012/07/15 Javascript
我的NodeJs学习小结(一)
2014/07/06 NodeJs
js实现iframe跨页面调用函数的方法
2014/12/13 Javascript
js实现动态创建的元素绑定事件
2016/07/19 Javascript
纯js实现动态时间显示
2020/09/07 Javascript
在vue里面设置全局变量或数据的方法
2018/03/09 Javascript
JS面试题大坑之隐式类型转换实例代码
2018/10/14 Javascript
实例讲解v-if和v-show的区别
2019/01/31 Javascript
vue-列表下详情的展开与折叠案例
2020/07/28 Javascript
微信小程序实现选项卡滑动切换
2020/10/22 Javascript
Python选择排序、冒泡排序、合并排序代码实例
2015/04/10 Python
讲解Python中的递归函数
2015/04/27 Python
python使用socket向客户端发送数据的方法
2015/04/29 Python
Python生成器generator用法示例
2018/08/10 Python
Python实现提取XML内容并保存到Excel中的方法
2018/09/01 Python
对python中Json与object转化的方法详解
2018/12/31 Python
Python中psutil的介绍与用法
2019/05/02 Python
Django框架实现的分页demo示例
2019/05/25 Python
python使用celery实现异步任务执行的例子
2019/08/28 Python
Python实现企业微信机器人每天定时发消息实例
2020/02/25 Python
pyautogui自动化控制鼠标和键盘操作的步骤
2020/04/01 Python
python中把元组转换为namedtuple方法
2020/12/09 Python
Moda Operandi官网:美国奢侈品电商,海淘秀场T台同款
2020/05/26 全球购物
《罗布泊,消逝的仙湖》教学反思
2014/03/01 职场文书
项目合作协议书范本
2014/04/16 职场文书
《恐龙》教学反思
2014/04/27 职场文书
2014年干部作风建设总结
2014/10/23 职场文书
学校食堂管理制度
2015/08/04 职场文书