hammer.js实现图片手势放大效果


Posted in Javascript onAugust 29, 2017

本文实例为大家分享了hammer.js实现图片手势放大效果的具体代码,供大家参考,具体内容如下

//图片手势放大
      var reqAnimationFrame = (function() {
        return window[Hammer.prefixed(window, 'requestAnimationFrame')] || function(callback) {
          window.setTimeout(callback, 1000 / 60);
        };
      })();
      var el = $('img');
      var ticking = false;
      var transform;
      var initScale = 1;
      var _eImg = '';
      for (var m = 0; m < el.length; m++) {
        var mc = new Hammer.Manager(el[m]);
        mc.add(new Hammer.Pan({
          threshold: 0,
          pointers: 0
        }));
        mc.add(new Hammer.Swipe()).recognizeWith(mc.get('pan'));
        mc.add(new Hammer.Pinch({
          threshold: 0
        })).recognizeWith(mc.get('pan'));
        mc.on('panstart panmove', onPan);
        mc.on('pinchstart pinchmove', onPinch);
        mc.on('swipe', onSwipe);
      }

      function resetElement() {
        el.addClass('animate');
        transform = {
          translate: {
            x: 0,
            y: 0
          },
          scale: 1,
          angle: 0,
          rx: 0,
          ry: 0,
          rz: 0
        };
        requestElementUpdate();
      }

      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(' ');
        if (_eImg != '') {
          _eImg.style.webkitTransform = value;
          _eImg.style.mozTransform = value;
          _eImg.style.transform = value;
          //_eImg.css({ 'transform': value }, { '-webkit-transform': value });
        }
        ticking = false;
      }

      function requestElementUpdate() {
        if (!ticking) {
          reqAnimationFrame(updateElementTransform);
          ticking = true;
        }
      }

      function onPan(ev) {
        el.removeClass('animate');
        transform.translate = {
          x: ev.deltaX,
          y: ev.deltaY
        };
      }

      function onPinch(ev) {
        if (ev.type == 'pinchstart') {
          initScale = transform.scale || 1;
        }
        el.removeClass('animate');
        transform.scale = initScale * ev.scale;
        requestElementUpdate();
        _eImg = ev.target;
        return _eImg;
      }

      function onSwipe(ev) {
        var angle = 10;
        transform.ry = (ev.direction & Hammer.DIRECTION_HORIZONTAL) ? 1 : 0;
        transform.rx = (ev.direction & Hammer.DIRECTION_VERTICAL) ? 1 : 0;
        transform.angle = (ev.direction & (Hammer.DIRECTION_RIGHT | Hammer.DIRECTION_UP)) ? angle : -angle;
        requestElementUpdate();
        _eImg = ev.target;
        return _eImg;
      }
      resetElement();

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JAVASCRIPT HashTable
Jan 22 Javascript
jquery 常用操作方法
Jan 28 Javascript
基于jQuery实现左右div自适应高度完全相同的代码
Aug 09 Javascript
JavaScript静态类型检查工具FLOW简介
Jan 06 Javascript
Node.js 去掉种子(torrent)文件里的邪恶信息
Mar 27 Javascript
js简单实现表单中点击按钮动态增加输入框数量的方法
Aug 18 Javascript
浅析javascript的return语句
Dec 15 Javascript
浅谈JQuery+ajax+jsonp 跨域访问
Jun 25 Javascript
微信小程序  网络请求API详解
Oct 25 Javascript
vue.js 上传图片实例代码
Jun 22 Javascript
基于js中的存储键值对以及注意事项介绍
Mar 30 Javascript
JavaScript函数柯里化实现原理及过程
Dec 02 Javascript
js禁止表单重复提交
Aug 29 #Javascript
View.post() 不靠谱的地方你知道多少
Aug 29 #Javascript
jsTree事件和交互以及插件plugins详解
Aug 29 #Javascript
移动端Ionic App 资讯上下循环滚动的实现代码(跑马灯效果)
Aug 29 #Javascript
基于jstree使用AJAX请求获取数据形成树
Aug 29 #Javascript
基于jQuery的左滑出现删除按钮的示例
Aug 29 #jQuery
jQuery实现简单的计时器功能实例分析
Aug 29 #jQuery
You might like
php适配器模式介绍
2012/08/14 PHP
Zend Studio去除编辑器的语法警告设置方法
2012/10/24 PHP
模板引擎smarty工作原理以及使用示例
2014/05/25 PHP
JavaScript isPrototypeOf和hasOwnProperty使用区别
2010/03/04 Javascript
用js通过url传参把数据从一个页面传到另一个页面
2014/09/01 Javascript
javascript实现全角与半角字符的转换
2015/01/07 Javascript
详解JavaScript中基于原型prototype的继承特性
2016/05/05 Javascript
bootstrap-datetimepicker实现只显示到日期的方法
2016/11/25 Javascript
Javascript 闭包详解及实例代码
2016/11/30 Javascript
canvas红包照片实例分享
2017/02/28 Javascript
vue.js利用Object.defineProperty实现双向绑定
2017/03/09 Javascript
详解Webpack + ES6 最新环境搭建与配置
2018/06/04 Javascript
用Node编写RESTful API接口的示例代码
2018/07/04 Javascript
Web安全之XSS攻击与防御小结
2018/12/13 Javascript
微信小程序如何使用云开发
2019/05/17 Javascript
js图片无缝滚动插件使用详解
2020/05/26 Javascript
Layui tree 下拉菜单树的实例代码
2019/09/21 Javascript
vue路由守卫,限制前端页面访问权限的例子
2019/11/11 Javascript
vue学习之Vue-Router用法实例分析
2020/01/06 Javascript
python嵌套函数使用外部函数变量的方法(Python2和Python3)
2016/01/31 Python
利用python3随机生成中文字符的实现方法
2017/11/24 Python
浅谈pandas dataframe对除数是零的处理
2020/07/20 Python
flask项目集成swagger的方法
2020/12/09 Python
瑞典时尚耳机品牌:Urbanears
2017/07/26 全球购物
大码女装:Ulla Popken
2019/08/06 全球购物
服装促销活动方案
2014/02/23 职场文书
幼儿园老师寄语
2014/04/03 职场文书
房产继承公证书
2014/04/09 职场文书
政治表现评语
2014/05/04 职场文书
投标人廉洁自律承诺书
2014/05/26 职场文书
家庭困难证明
2014/10/12 职场文书
thinkphp 获取控制器及控制器方法
2021/04/16 PHP
使用 Apache Superset 可视化 ClickHouse 数据的两种方法
2021/07/07 Servers
Python 实现Mac 屏幕截图详解
2021/10/05 Python
mysql数据库实现设置字段长度
2022/06/10 MySQL
vue本地构建热更新卡顿的问题“75 advanced module optimization”完美解决方案
2022/08/05 Vue.js