touch.js 拖动、缩放、旋转 (鼠标手势)功能代码

 更新时间:2017年02月04日 13:55:29   作者:孟然  
这篇文章主要介绍了touch.js 拖动、缩放、旋转 (鼠标手势)功能,代码简单易懂,非常不错,具有参考借鉴价值,需要的朋友可以参考下

可以实现手势操作:拖动、缩放、旋转。封装好的脚本方法是这样的:

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用JSONP跨域请求数据实例详解

    JavaScript用JSONP跨域请求数据实例详解

    Javascript跨域访问是web开发者经常遇到的问题,什么是跨域,就是一个域上加载的脚本获取或操作另一个域上的文档属性。下面这篇文章主要介绍了JavaScript用JSONP跨域请求数据的方法,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-01-01
  • 浅谈javascript alert和confirm的美化

    浅谈javascript alert和confirm的美化

    window对象的alert和confirm标准方法在不同浏览器的显示效果不太相同,有个相同点是都不是很美观。本文对此解决方法进行介绍:使用js和css分别仿照它们,提供另一套函数,使在不同浏览器的有着相同的体验效果。下面就跟小编一起来看下吧
    2016-12-12
  • 网页开发中的容易忽略的问题 javascript HTML中的table

    网页开发中的容易忽略的问题 javascript HTML中的table

    最近在搞在线电子表格这个东西,下面的是使用中的一些知识技巧。
    2009-04-04
  • javascript this用法小结

    javascript this用法小结

    this是JavaScript中功能最强大的关键字之一。不幸的是,如果你不知道它具体怎么工作,你将很难正确使用它。
    2008-12-12
  • 18个高频使用的JS工具方法总结

    18个高频使用的JS工具方法总结

    这篇文章主要为大家分享一下18个在项目中使用很高频的JS工具方法,希望大家能够知其然也知其所以然,不要只会调用 api,也要会写 api,快跟随小编一起学习一下吧
    2022-04-04
  • 小程序Scroll-view上拉滚动刷新数据

    小程序Scroll-view上拉滚动刷新数据

    这篇文章主要为大家详细介绍了小程序Scroll-view上拉滚动刷新数据,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06
  • 用javascript实现点击链接弹出"图片另存为"而不是直接打开

    用javascript实现点击链接弹出"图片另存为"而不是直接打开

    用javascript实现点击链接弹出"图片另存为"而不是直接打开...
    2007-08-08
  • Echarts直角坐标系x轴y轴属性设置整理大全

    Echarts直角坐标系x轴y轴属性设置整理大全

    直角坐标系的设置指的是网格,坐标轴和区域缩放的配置,下面这篇文章主要给大家介绍了关于Echarts直角坐标系x轴y轴属性设置的相关资料,需要的朋友可以参考下
    2022-11-11
  • 详解JavaScript中Proxy与Object.defineProperty的区别

    详解JavaScript中Proxy与Object.defineProperty的区别

    Proxy和Object.defineProperty都是JavaScript中用于实现对象属性拦截和代理的机制,但它们在功能和应用方面有一些区别,本文通过代码示例详细介绍了二者的区别,感兴趣的朋友可以参考下
    2023-06-06
  • JavaScript requestAnimationFrame动画详解

    JavaScript requestAnimationFrame动画详解

    这篇文章主要为大家详细介绍了JavaScript requestAnimationFrame动画,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-09-09

最新评论