一、下载

链接:https://pan.baidu.com/s/1UbEtSbT1xcmdzzTCaWmW1A
提取码:ldqy

二、案例

三、代码

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

    <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, maximum-scale=1">

    <link rel="stylesheet" href="assets/style.css">

    <title>Hammer.js</title>

    <style>

        html, body {

            overflow: hidden;

            margin: 0;

        }

        body {

            -webkit-perspective: 500;

            -moz-perspective: 500;

            perspective: 500;

        }

        .animate {

            -webkit-transition: all .3s;

            -moz-transition: all .3s;

            transition: all .3s;

        }

        #hit {

            padding: 10px;

        }

        #log {

            position: absolute;

            padding: 10px;

        }

    </style>

</head>

<body>

<div style="position: absolute; top:60; left: 0; border: 0;"><img src="22.png"><br>通过二维码手机上查看多点触控效果</div>

<div id="log"></div>

<div id="hit"style="background: #42d692; width: 150px; height: 150px;"></div>

<script src="hammer.js"></script>

<script>

    var reqAnimationFrame = (function () {

        return window[Hammer.prefixed(window, 'requestAnimationFrame')] || function (callback) {

            window.setTimeout(callback, 1000 / 60);

        };

    })();

    var log = document.querySelector("#log");

    var el = document.querySelector("#hit");

    var START_X = Math.round((window.innerWidth - el.offsetWidth) / 2);

    var START_Y = Math.round((window.innerHeight - el.offsetHeight) / 2);

    var ticking = false;

    var transform;

    var timer;

    var mc = new Hammer.Manager(el);

    mc.add(new Hammer.Pan({ threshold: 0, pointers: 0 }));

    mc.add(new Hammer.Swipe()).recognizeWith(mc.get('pan'));

    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.add(new Hammer.Tap({ event: 'doubletap', taps: 2 }));

    mc.add(new Hammer.Tap());

    mc.on("panstart panmove", onPan);

    mc.on("rotatestart rotatemove", onRotate);

    mc.on("pinchstart pinchmove", onPinch);

    mc.on("swipe", onSwipe);

    mc.on("tap", onTap);

    mc.on("doubletap", onDoubleTap);

    mc.on("hammer.input", function(ev) {

        if(ev.isFinal) {

            resetElement();

        }

    });

    function resetElement() {

        el.className = 'animate';

        transform = {

            translate: { x: START_X, y: START_Y },

            scale: 1,

            angle: 0,

            rx: 0,

            ry: 0,

            rz: 0

        };

        requestElementUpdate();

        if (log.textContent.length > 2000) {

            log.textContent = log.textContent.substring(0, 2000) + "...";

        }

    }

    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.textContent = value;

        el.style.webkitTransform = value;

        el.style.mozTransform = value;

        el.style.transform = value;

        ticking = false;

    }

    function requestElementUpdate() {

        if(!ticking) {

            reqAnimationFrame(updateElementTransform);

            ticking = true;

        }

    }

    function logEvent(str) {

        //log.insertBefore(document.createTextNode(str +"\n"), log.firstChild);

    }

    function onPan(ev) {

        el.className = '';

        transform.translate = {

            x: START_X + ev.deltaX,

            y: START_Y + ev.deltaY

        };

        requestElementUpdate();

        logEvent(ev.type);

    }

    var initScale = 1;

    function onPinch(ev) {

        if(ev.type == 'pinchstart') {

            initScale = transform.scale || 1;

        }

        el.className = '';

        transform.scale = initScale * ev.scale;

        requestElementUpdate();

        logEvent(ev.type);

    }

    var initAngle = 0;

    function onRotate(ev) {

        if(ev.type == 'rotatestart') {

            initAngle = transform.angle || 0;

        }

        el.className = '';

        transform.rz = 1;

        transform.angle = initAngle + ev.rotation;

        requestElementUpdate();

        logEvent(ev.type);

    }

    function onSwipe(ev) {

        var angle = 50;

        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;

        clearTimeout(timer);

        timer = setTimeout(function () {

            resetElement();

        }, 300);

        requestElementUpdate();

        logEvent(ev.type);

    }

    function onTap(ev) {

        transform.rx = 1;

        transform.angle = 25;

        clearTimeout(timer);

        timer = setTimeout(function () {

            resetElement();

        }, 200);

        requestElementUpdate();

        logEvent(ev.type);

    }

    function onDoubleTap(ev) {

        transform.rx = 1;

        transform.angle = 80;

        clearTimeout(timer);

        timer = setTimeout(function () {

            resetElement();

        }, 500);

        requestElementUpdate();

        logEvent(ev.type);

    }

    resetElement();

</script>

</body>

</html>

Js 之常见手势操作插件 Hammer.js的更多相关文章

  1. 多点触控插件Hammer.js

    插件描述:Hammer.js是一个开源的,轻量级的javascript库,它可以在不需要依赖其他东西的情况下识别触摸,鼠标事件. 使用方法: <script src=<span class ...

  2. 插件: Hammer.js

    官网: http://hammerjs.github.io/  hammer.js 官网 http://hammerjs.github.io/api/ 官网API(官网写的实在太简了!不好用.注意里面 ...

  3. JS/JQ常见兼容辅助插件

    1.Respond.js Respond.js 是一个快速.轻量的 polyfill,用于为 IE6-8 以及其它不支持 CSS3 Media Queries 的浏览器提供媒体查询的 min-widt ...

  4. 代码笔记-触摸事件插件hammer.js使用

    如果要使用jquery,则需要下载jquery.hammer.min.js版本 新建一个hammer对象生成的对象是dom对象,不能直接使用jqeury 的  $(this)方法,需要先将其转成jqu ...

  5. js手机移动端选择插件 mobileSelect.js

    一.mobileSelect获取方法 mobileSelect支持单选.多级联动.自定义回调函数.二次渲染.最新版本下载地址[2017-09-21更新]: https://github.com/onl ...

  6. JS - 超强大文本动画插件Textillate.js

    http://www.yyyweb.com/demo/textillate/ Textillate.js AsimplepluginforCSS3textanimations.

  7. JS+CSS3 360度全景图插件 - Watch3D.js

    日常闲扯 从上一篇文章到这篇中间快过了一年了,时间真滴过得快.不是在下中间没想过写新的文章,而是自己确实变懒了(体重+1 +1 +1 +1....) ..OTL...不过到最后觉得还是需要写点东西,不 ...

  8. Hammer.js手势库 安卓4.0.4上的问题

    Hammer.JS - v1.0.7dev - 2014-02-18 1.Hammer.JS 在安卓4.0.4 , 4.1上 touchmove事件丢失 https://code.google.com ...

  9. javascript 手势缩放 旋转 拖动支持:hammer.js

    原文: https://cdn.rawgit.com/hammerjs/hammer.js/master/tests/manual/visual.html /*! Hammer.JS - v2.0.4 ...

随机推荐

  1. sql语句中包含引号处理方法

    1. 背景 在使用Python脚本向数据库导入日志文件时候,突然报错. 2. 解决思路 查看messages文件,发现有一条语句里包含单引号. 查看sql语句,是使用单引号标注str类型. 3. 得出 ...

  2. 【转载】常见面试题:C#中String和string的区别分析

    在很多人面试C#开发工程师的时候,会遇到一个面试题,就是C#中String和string有啥区别.其实针对这个问题C#中String和string没有本质上的区别,两者在程序中都可使用,稍微的一个区别 ...

  3. 《你不知道的Javascript》感悟篇—对象属性遍历的那些事

    划重点 本篇笔者将重点介绍JavaScript中 getOwnPropertyNames .Object.keys.for ... in 的使用及他们之间的异同点. getOwnPropertyNam ...

  4. vue中组件之间的通信

    一.vue中组件通信的种类 父组件向子组件的通信 子组件向父组件的通信 隔代组件之间的通信 兄弟 组件 之间的通信 二.实现通信的方式  props vue自定义的事件 消息订阅与发布 vuex sl ...

  5. shell 脚本总结

    一.SHELL脚本是什么?它是必需的吗? 一个SHELL脚本就是一个文本文件,它包含一个或多个命令.系统管理员会经常需要使用多个命令来完成一项任务,此时可以添加这些所有命令在一个文本文件(SHELL脚 ...

  6. 正padding负margin实现多列等高布局(转)

    转自: 巧妙运用CSS中的负值 (http://www.webhek.com/post/2345qwerqwer.html) 代码来自: https://codepen.io/Chokcoco/pen ...

  7. Android NDK 学习之接受Java传入的字符串

    本博客主要是在Ubuntu 下开发,且默认你已经安装了Eclipse,Android SDK, Android NDK, CDT插件. 在Eclipse中添加配置NDK,路径如下Eclipse-> ...

  8. 【Distributed】分布式解决方案【汇总】

    一.问题引出 二.分布式Session问题 三.网站跨域问题 四.分布式任务调度平台 五.分布式配置中心 六.分布式锁解决方案 七.缓存技术 一.问题引出 [Distributed]分布式系统中遇到的 ...

  9. MySql 学习之 一条查询sql的执行过程

    相信大家都接触过Mysql数据库,而且也肯定都会写sql.我不知道大家有没有这样的感受,反正我是有过这样的想法.就是当我把一条sql语句写完了,并且执行完得到想要的结果.这时我就在想为什么我写这样的一 ...

  10. git命令——git log

    功能 在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史. 完成这个任务最简单而又有效的方法是 使用git log 命令. 参数 不带任何参数 $ git log commit ca8 ...