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学习笔记记录我的旅程
May 23 Javascript
深入理解javascript构造函数和原型对象
Sep 23 Javascript
Bootstarp风格的toggle效果分享
Feb 23 Javascript
JS根据浏览器窗口大小实时动态改变网页文字大小的方法
Feb 25 Javascript
一个Js文件函数中调用另一个Js文件函数的方法演示
Aug 14 Javascript
VueJS组件之间通过props交互及验证的方式
Sep 04 Javascript
vue实现搜索过滤效果
May 28 Javascript
layui表格分页 记录勾选的实例
Sep 02 Javascript
使用JS监听键盘按下事件(keydown event)
Nov 07 Javascript
JavaScript中的惰性载入函数及优势
Feb 18 Javascript
使用vue实现通过变量动态拼接url
Jul 22 Javascript
vue axios请求成功却进入catch的原因分析
Sep 08 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
自己动手,丰衣足食 - 短波框形天线制作
2021/03/01 无线电
调试一段PHP程序时遇到的三个问题
2012/01/17 PHP
使用Linux五年积累的一些经验技巧
2013/06/20 PHP
Laravel实现表单提交
2017/05/07 PHP
Laravel 批量更新多条数据的示例
2017/11/27 PHP
极酷的javascirpt,让你随意编辑任何网页
2007/02/25 Javascript
使用JavaScript 实现对象 匀速/变速运动的方法
2013/05/08 Javascript
js控制当再次点击按钮时的间隔时间
2014/06/03 Javascript
jQuery中click事件用法实例
2014/12/26 Javascript
js的for in循环和java里foreach循环的区别分析
2015/01/28 Javascript
分享两个手机访问pc网站自动跳转手机端网站代码
2020/12/24 Javascript
使用postMesssage()实现iframe跨域页面间的信息传递
2016/03/29 Javascript
javascript十六进制数字和ASCII字符之间的转换方法
2016/12/27 Javascript
Bootstrap Table使用整理(五)之分页组合查询
2017/06/09 Javascript
浅谈React Native 中组件的生命周期
2017/09/08 Javascript
详解Vue快速零配置的打包工具——parcel
2018/01/16 Javascript
layer关闭弹出窗口触发表单提交问题的处理方法
2019/09/25 Javascript
详解vue beforeEach 死循环问题解决方法
2020/02/25 Javascript
Python入门之后再看点什么好?
2018/03/05 Python
使用Python实现一个栈判断括号是否平衡
2018/08/23 Python
python使用Turtle库绘制动态钟表
2018/11/19 Python
150行python代码实现贪吃蛇游戏
2020/04/24 Python
JackJones官方旗舰店:杰克琼斯男装
2018/03/27 全球购物
Charlotte Tilbury澳大利亚官网:英国美妆品牌
2018/10/05 全球购物
经典c++面试题三
2015/07/08 面试题
一套软件开发工程师笔试题
2015/05/18 面试题
专升本个人自我评价
2013/12/22 职场文书
《池塘边的叫声》教学反思
2014/04/12 职场文书
保护水资源的标语
2014/06/17 职场文书
工厂车间标语
2014/06/19 职场文书
小学感恩教育活动总结
2014/07/07 职场文书
2014年机关党建工作总结
2014/11/11 职场文书
2014年组织委员工作总结
2014/12/01 职场文书
python b站视频下载的五种版本
2021/05/27 Python
windows11怎么查看自己安装的版本号? win11版本号的查看方法
2021/11/21 数码科技
防止web项目中的SQL注入
2021/12/06 MySQL