一、下载

链接: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. span标签中显示固定长度,超出部分用省略号代替,光标放到文字上显示全部

    在span中实现显示某段内容,固定其长度,多余部分用省略号代替,这样就用到html的title属性: 如:<span title="value"></span&g ...

  2. centos7上使用git clone出现问题

    centos 7  git clone时出现不支持协议版本的问题 unable to access 'https://github.com/baloonwj/TeamTalk.git/': Peer ...

  3. springboot下@webfilter的使用

    启动类加了@ServletComponentScan,无论过滤器类加不加@Componment urlPatterns = {"/test/*"}都可以生效 单使用@Compone ...

  4. 如何在SAP云平台ABAP编程环境里把CDS view暴露成OData服务

    Jerry 2016年在学习SAP CDS view时,曾经写过一个CDS view的自学系列,其中有一篇提到了一个很方便的注解: @OData.publish: true 加上这个注解的CDS vi ...

  5. Cron 定时任务表达式

    Cron Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式: Seconds Minutes Hours DayofMonth M ...

  6. 二、详解mysql数据类型

    一.主要内容 1.介绍mysql中常用的数据类型 2.mysql类型和java类型对应关系 3.数据类型选择的一些建议 二.mysql的数据类型 主要包括以下五大类 整数类型:bit  bool  t ...

  7. Hive笔记及配置

    Hive 基于Hadoop的数据仓库工具: 将结构化的数据文件,映射为一张表,并提供类SQL查询功能: 本质:将HQL转化为MapReduce程序: Hive处理的数据存储在HDFS: Hive分析数 ...

  8. testlink关联redmine设置

    Testlink关联Redmine 公司用testlink对测试用例进行维护,redmine关系项目及bug,所以为了方便期间,将Testlink关联Redmine,方便测试用例执行后,在redmin ...

  9. idea上 实现了Serializable接口,要自动生成serialVersionUID的方法

    需要点进setting ->搜索Inspections-->右侧选择java 下拉 进入Serialization issue--->勾选Serializable class wit ...

  10. LESS简介与使用方法

    less 是一门 CSS 预处理语言,它扩展了 CSS 语言,增加了变量.Mixin.函数等特性,使 CSS 更易维护和扩展. 一.传统写法与 less 写法对比 1. 传统 css 写法: .con ...