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 相关文章推荐
javascript Prototype 对象扩展
May 15 Javascript
jQueryUI的Dialog的简单封装
Jun 07 Javascript
JQuery.closest(),parent(),parents()寻找父结点
Feb 17 Javascript
jquery如何改变html标签的样式(两种实现方法)
Jan 16 Javascript
基于jQuery实现复选框是否选中进行答题提示
Dec 10 Javascript
JavaScript的设计模式经典之代理模式
Feb 24 Javascript
Node.js复制文件的方法示例
Dec 29 Javascript
微信小程序 省市区选择器实例详解(附源码下载)
Jan 05 Javascript
性能优化之代码优化页面加载速度
Mar 01 Javascript
微信小程序自定义弹窗实现详解(可通用)
Jul 04 Javascript
layui实现根据table数据判断按钮显示情况的方法
Sep 26 Javascript
Vue实现点击按钮复制文本内容的例子
Nov 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
Syphon 虹吸式咖啡壶冲煮–拨动法
2021/03/03 冲泡冲煮
菜鸟学PHP之Smarty入门
2007/01/04 PHP
PHP操作xml代码
2010/06/17 PHP
PHP获取服务器端信息的方法
2014/11/28 PHP
yii2安装详细流程
2018/05/23 PHP
基于jquery的监控数据是否发生改变
2011/04/11 Javascript
javascript实现简单的Map示例介绍
2013/12/23 Javascript
鼠标事件的screenY,pageY,clientY,layerY,offsetY属性详解
2015/03/12 Javascript
Angularjs制作简单的路由功能demo
2015/04/14 Javascript
jquery拼接ajax 的json和字符串拼接的方法
2017/03/11 Javascript
vuejs中监听窗口关闭和窗口刷新事件的方法
2018/09/21 Javascript
webpack打包多页面的方法
2018/11/30 Javascript
JS实现简单的表格增删
2020/01/16 Javascript
2分钟实现一个Vue实时直播系统的示例代码
2020/06/05 Javascript
[23:21]Ti4 冒泡赛第二轮DK vs C9 2
2014/07/14 DOTA
Python字符串详细介绍
2015/05/09 Python
Python中文竖排显示的方法
2015/07/28 Python
详解字典树Trie结构及其Python代码实现
2016/06/03 Python
Python正则表达式教程之三:贪婪/非贪婪特性
2017/03/02 Python
Python随机读取文件实现实例
2017/05/25 Python
Python中 map()函数的用法详解
2018/07/10 Python
使用Py2Exe for Python3创建自己的exe程序示例
2018/10/31 Python
Python redis操作实例分析【连接、管道、发布和订阅等】
2019/05/16 Python
django框架使用views.py的函数对表进行增删改查内容操作详解【models.py中表的创建、views.py中函数的使用,基于对象的跨表查询】
2019/12/12 Python
使用python处理题库表格并转化为word形式的实现
2020/04/14 Python
Python 多进程、多线程效率对比
2020/11/19 Python
CSS3实现歌词进度文字颜色填充变化动态效果的思路详解
2020/06/02 HTML / CSS
Html5实现如何在两个div元素之间拖放图像
2013/03/29 HTML / CSS
植物选择:Botanic Choice
2017/02/15 全球购物
加拿大奢华时装品牌:Mackage
2018/01/10 全球购物
Chi Chi London官网:购买连衣裙和礼服
2020/10/25 全球购物
医院见习报告范文
2014/11/03 职场文书
初中学生操行评语
2014/12/26 职场文书
五一劳动节慰问信
2015/02/14 职场文书
2015年超市工作总结范文
2015/05/26 职场文书
婚庆开业庆典主持词
2015/06/30 职场文书