第一步

下载hammer.js并引入
下载地址可以是:http://hammerjs.github.io/

第二步

复制下面这些代码,放在你的js里面

function drag(drag){var reqAnimationFrame = (function () {return window[Hammer.prefixed(window, 'requestAnimationFrame')] || function (callback) {window.setTimeout(callback, 1000 / 60);};})();var el = document.querySelector(drag);var START_X = 0;var START_Y = 0;var ticking = false;var transform; //图像效果var timer;var initAngle = 0; //旋转角度var initScale = 3; //放大倍数var mc = new Hammer.Manager(el); //用管理器 可以同时触发旋转 拖拽 移动//var mc = new Hammer(el); //旋转和移动互斥/**ev.srcEvent.type touchstart touchend touchmoveev.deltaX 手势移动位移变量 */mc.add(new Hammer.Pan({ threshold: 0, pointers: 0 }));mc.add(new Hammer.Rotate({ threshold: 0 })).recognizeWith(mc.get('pan'));mc.add(new Hammer.Pinch({ threshold: 0 })).recognizeWith([mc.get('pan'), mc.get('rotate')]);//结束时做一些处理mc.on("hammer.input", function(ev) {if(ev.isFinal) {console.log(START_X+" "+transform.translate.x +" "+ev.deltaX);START_X = transform.translate.x ;START_Y = transform.translate.y ;}});mc.on("panstart panmove", onPan);mc.on("rotatestart rotatemove rotateend", onRotate);mc.on("pinchstart pinchmove", onPinch);/**第二次进入拖拽时 delta位移重置移动时 初始位置startxy不动。delta增加*/function onPan(ev){if(!ev.isFinal) {$(drag).removeClass('animate');console.log(START_X +" "+ START_Y +" | "+ev.deltaX +" "+ ev.deltaY); transform.translate = {x: START_X + ev.deltaX,y: START_Y + ev.deltaY};requestElementUpdate();} }function onPinch(ev){if(ev.type == 'pinchstart') {initScale = transform.scale || 1;}$(drag).removeClass('animate');transform.scale = initScale * ev.scale;requestElementUpdate(); }//旋转相关var preAngle =0 ;var tempAngleFlag=0;var deltaAngle = 0; var startRotateAngle = 0;function onRotate(ev) {//点下第二个触控点时触发if(ev.type == 'rotatestart') { startRotateAngle = ev.rotation ; tempAngleFlag = 0 ;} if(ev.type == 'rotatemove'){if(tempAngleFlag == 0){preAngle = startRotateAngle;tempAngleFlag ++;}else{ deltaAngle = ev.rotation - preAngle;$(drag).removeClass('animate');transform.rz = 1; //非0 垂直xy轴transform.angle =initAngle + deltaAngle; requestElementUpdate(); }}//旋转结束 记录当前图片角度 if(ev.type =='rotateend'){initAngle = transform.angle;} }function updateElementTransform() {var value = ['translate3d(' + transform.translate.x + 'px, ' + transform.translate.y + 'px, 0)','scale(' + transform.scale + ', ' + transform.scale + ')','rotate3d('+ transform.rx +','+ transform.ry +','+ transform.rz +','+ transform.angle + 'deg)'];value = value.join(" ");el.style.webkitTransform = value; /*为Chrome/Safari*/el.style.mozTransform = value; /*为Firefox*/el.style.transform = value; /*IE Opera?*/ticking = false;}function requestElementUpdate() {if(!ticking) {reqAnimationFrame(updateElementTransform);ticking = true;}}/**初始化设置*/function resetElement() {el.className += ' animate';transform = {translate: { x: START_X, y: START_Y },scale: 1,angle: 0,rx: 0,ry: 0,rz: 0};requestElementUpdate();}resetElement();
}

第三步

直接调用drag方法,传入你要移动/缩放/旋转的元素,控制几个调用几次就行
比如,我需要控制的是class为a的div和class为b的div,则:

drag('.a');
drag('.b');

hammer.js移动端拖拽缩放旋转元素相关推荐

  1. html鼠标拖动变换大小案例,js实现鼠标拖拽缩放div实例代码_哒哒_前端开发者

    封装为了jq插件,如下 drag. ;(function ($) { $.fn.dragDiv = function (options) { var def = { maxW:600,// 可伸缩的最 ...

  2. H5头像完整制作,可拖拽缩放,可添加装饰图标(装饰图标支持缩放、旋转、拖拽)

    H5头像制作类的程序本以为到处都可以搜索到,可是真写这个项目的时候才发现太困难了,因为根本没有现成的功能模块可以拼凑,着实费了不少力气,好在最终圆满交工. 还是先看效果 源码获取渠道 小程序内联系客服 ...

  3. html手机模块化,jQuery 移动端拖拽(模块化开发,触摸事件,webpack)

    通过jquery可以很容易实现CP端的拖拽.但是在移动端却不好用了.于是我自己写了一个在移动端的拖拽demo,主要用到的事件是触摸事件(touchstart,touchmove和touchend). ...

  4. iOS学习笔记-068.手势识别02——捏合、拖拽、旋转手势

    手势识别02捏合拖拽旋转手势 一捏合手势 1 UIPinchGestureRecognizerh 2 代码示例 3 图示 二拖拽手势 1 UIPanGestureRecognizerh 2 代码示例 ...

  5. 【加强版】js原生实现拖拽效果,这次没有用document的mousedown、mousemove、mouseup事件我们来点实际的(但是有个弊端:拖拽过程中鼠标会变成一个禁用符号,不太友好)

    <div class='dragged'></div> //初始化需要拖拽的列initDrags() {var arr = document.querySelectorAll( ...

  6. 【墙裂推荐】【原生基础版】js原生实现拖拽效果,注意不要忘了div的cursor用grab和grabbing 还是古法炮制、传统工艺的原生代码兼容性最好,推荐

    以下方式的劣势就是在放弃拖拽那一刻会触发click事件,通常如果被拖拽元素还有其他点击事件,会重复触发,往往并非业务需求.优势就是-额-貌似这段代码没什么屌优势! <div class='dra ...

  7. html点击控制盒子左右移动,JS实现鼠标拖拽盒子移动及右键点击盒子消失效果示例...

    JS实现鼠标拖拽盒子移动及右键点击盒子消失效果示例 发布时间:2020-10-04 12:47:25 来源:脚本之家 阅读:121 作者:s_psycho 本文实例讲述了JS实现鼠标拖拽盒子移动及右键 ...

  8. vue-draggable-resizable-gorkys 可拖拽缩放的组件

    说明:组件基于vue-draggable-resizable进行二次开发. 文章引用于vue-draggable-resizable 可拖拽缩放的组件 - SegmentFault 思否 git引用于 ...

  9. vue移动端拖拽悬浮按钮

    vue移动端拖拽悬浮按钮 功能介绍: 大致需求: 整体思路: 简单效果展示: 具体实现: 一.position:fixed布局: 二.touch事件绑定: 三.页面引入: 功能介绍: 在移动端开发中, ...

最新文章

  1. live555学习笔记2-基础类
  2. hash是线程安全的吗?怎么解决?_这次进程、线程、多线程和线程安全问题,一次性帮你全解决了...
  3. SELinux策略语言--客体类别和许可
  4. php导出mongo日志,导出mongo库到本地
  5. Java生鲜电商平台-SpringCloud微服务开发中的数据架构设计实战精讲
  6. WCF RIA优缺点
  7. linq判断集合中相同元素个数_java----Collection集合常用方法
  8. 1644 免费馅饼 题解(c++)(S.B.S.)
  9. React 深入系列4:组件的生命周期
  10. should, could, would, will, be going to, may, might到底有甚麼不同,又該怎麼用?
  11. 五边形镶嵌计算机程序,如何看待美国数学家发现可无缝密铺平面的五边形?.doc...
  12. APEX弹窗闪退报错(005,006,007 DXGI_ERROR_DEVICE_REMOVED)问题完全解决方案
  13. 达梦数据库启动、停止,集群环境监视器服务启动、停止,查看各机器状态
  14. 单极性SPWM的两种控制方法与过零点输出特性分析比较
  15. 小学英语之拯救小学生 V1.0 名词单复数变化规则
  16. java gef_GEF最简单的入门-helloword(1)
  17. 程序员面试 算法研究 编程艺术 红黑树 机器学习5大系列集锦
  18. 量子计算机技术难,量子计算机是什么工作原理运行的?现在制造还存在什么技术上的难...
  19. MySQL数据库课程设计_Wincc实现与数据库的交互以及报表的实现方式
  20. 如何更改AutoCAD软件图纸背景颜色?

热门文章

  1. 通达信获取行情主站ip地址方法
  2. 计算机网络实验软件工具
  3. 强化学习处理自适应码流播放,爱奇艺AI推荐提升观看率15%
  4. IDEA中debug查看request的parameter
  5. Java后台生成二维码
  6. 门户通专访站长刘元吉:网页设计要抓住精髓
  7. 高通平台USB如何枚举 mass_storage,以及将nandflash/sd/emmc存储分区通过usb mass_storage function映射到PC 上面
  8. 阶跃响应指标的matlab计算
  9. 12306官网自动刷票5秒太慢了,试试这个方法提速
  10. 区块链行业的一次“里程碑时刻”…