• 技术文章 >web前端 >js教程

    hammer.js实现移动端的图片手势放大功能

    php中世界最好的语言php中世界最好的语言2018-05-11 14:41:51原创2937
     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();

    相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

    推荐阅读:

    Node.js文件系统操作

    es6解构有哪些方法

    以上就是hammer.js实现移动端的图片手势放大功能的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:javascript hammer.js 手势
    上一篇:js发布者订阅者模式使用详解 下一篇:js如何设置禁止表单重复提交
    php培训_php实战培训【立即报名】-php中文网第20期

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• 一篇搞定JavaScript DOM详细操作• 深入聊聊JavaScript• JavaScript迭代器知识点总结• 11个可以提升效率的chrome调试技巧• 简单了解JavaScript数据结构与算法之栈
    1/1

    PHP中文网