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 相关文章推荐
一个用js实现的页内搜索代码
May 23 Javascript
javascript Demo模态窗口
Dec 06 Javascript
HTA版JSMin(省略修饰语若干)基于javascript语言编写
Dec 24 Javascript
学习javascript,实现插入排序实现代码
Jul 31 Javascript
输入自动提示搜索提示功能的使用说明:sugggestion.txt
Sep 02 Javascript
js中function()使用方法
Dec 24 Javascript
JavaScript设计模式之策略模式实例
Oct 10 Javascript
jQuery拖拽插件gridster使用指南
Apr 21 Javascript
javascript Promise简单学习使用方法小结
May 17 Javascript
如何使用headjs来管理和异步加载js
Nov 29 Javascript
使用socket.io实现简单聊天室案例
Jan 02 Javascript
Node错误处理笔记之挖坑系列教程
Jun 05 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
SONY ICF-SW7600的电路分析
2021/03/02 无线电
Syphon 秘笈
2021/03/03 冲泡冲煮
PHP缓存技术的使用说明
2011/08/06 PHP
php 计划任务 检测用户连接状态
2012/03/29 PHP
PHP实现下载功能的代码
2012/09/29 PHP
zend framework重定向方法小结
2016/05/28 PHP
CL vs ForZe BO5 第二场 2.13
2021/03/10 DOTA
JQuery自定义事件的应用 JQuery最佳实践
2010/08/01 Javascript
自己动手制作jquery插件之自动添加删除行的实现
2011/10/13 Javascript
iframe子页面获取父页面元素的方法
2013/11/05 Javascript
js动态移动滚动条至底部示例代码
2014/04/24 Javascript
JavaScript中length属性的使用方法
2015/06/05 Javascript
jQuery中Ajax全局事件引用方式及各个事件(全局/局部)执行顺序
2016/06/02 Javascript
用Vue-cli搭建的项目中引入css报错的原因分析
2017/07/20 Javascript
PHP 实现一种多文件上传的方法
2017/09/20 Javascript
微信小程序template模板实例详解
2017/10/27 Javascript
详解vuex之store拆分即多模块状态管理(modules)篇
2018/11/13 Javascript
vue实现前台列表数据过滤搜索、分页效果
2019/05/28 Javascript
浅谈Python实现2种文件复制的方法
2018/01/19 Python
python 实现敏感词过滤的方法
2019/01/21 Python
详解Python sys.argv使用方法
2019/05/10 Python
对python中的控制条件、循环和跳出详解
2019/06/24 Python
基于Python生成个性二维码过程详解
2020/03/05 Python
Python基于yield遍历多个可迭代对象
2020/03/12 Python
python集合的新增元素方法整理
2020/12/07 Python
Luxplus荷兰:以会员价购买美容产品等,独家优惠
2019/08/30 全球购物
团支书的期末学习总结自我评价
2013/11/01 职场文书
毕业生自荐书
2014/02/02 职场文书
交通安全责任书范本
2014/07/24 职场文书
工作总结与自我评价
2014/09/18 职场文书
鸟的天堂导游词
2015/01/31 职场文书
校长一岗双责责任书
2015/05/09 职场文书
高三化学教学反思
2016/02/22 职场文书
Centos7中MySQL数据库使用mysqldump进行每日自动备份的编写
2021/08/02 MySQL
基于Python和openCV实现图像的全景拼接详细步骤
2021/10/05 Python
quickjs 封装 JavaScript 沙箱详情
2021/11/02 Javascript