移动端手势事件 hammer.JS插件

一、引入hammer.JS

1.下载地址:http://download.csdn.net/detail/webxiaoma/9872249 
2.官网地址:http://hammerjs.github.io/examples/ 
3.CDN链接:http://hammerjs.github.io/dist/hammer.min.js

二、用法

1.首先我们先写一个出发事件的DOM元素

HTML:

   <style type="text/css">
       html, body {
           width: 100%;
           height: 100%;
           margin: 0px;
           padding: 0px;
       }

       .test {
           width: 100%;
           height: 100%;
           background: red;
           text-align: left;
           color:white;
       }

   </style>
  <div id="test" class="test"></div>

2.我们创建一个新的hammer对象并且在初始化时指定要处理的dom元素

var hammertime = new Hammer(document.getElementById("test"));

3.为该dom元素指定触屏移动事件

hammertime.on("press", function (e) {                    document.getElementById("result").innerHTML += "按压超过500ms了";

});

三、注意点 重点内容

1.推荐使用视口元标记,通过禁用双引号/缩小缩放功能,可以更好地控制网页。

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

2.水平 pan和swipe和多点触控pinch和rotate识别。默认情况下,压缩和旋转识别器将被禁用,因为它们会使元素阻塞,但您可以通过调用以下方式启用它们: 
①方法一:

 hammertime.add(new Hammer.Pinch());
 hammertime.add(new Hammer.Rotate());

②方法二:

hammertime.get(‘pinch‘).set({ enable: true });
hammertime.get(‘rotate‘).set({ enable: true });

//启用pan和swipe识别器的垂直方向或全方向:
hammertime.get(‘pan‘).set({ direction: Hammer.DIRECTION_ALL });
hammertime.get(‘swipe‘).set({ direction: Hammer.DIRECTION_VERTICAL });

启用成功后在去调用该事件,否则该事件可能不会触发。 
另外我们也可以使用 remove(事件) 移除某个事件

hammertime.remove(‘rotate‘); // 移除旋转手势事件

四、提供的事件

1、点击事件(也就是常说的tocuh事件)

选项 默认 描述
event pan 事件名称
pointers 1 必需指针。0为所有指针。
threshold 10 识别前需要的最小平移距离
direction DIRECTION_ALL 平移方向。

panstart 单手指按下时事件 
panmove 单手指移动时事件 
panend 单手指离开时事件 
pancancel 手势事件被移除是触发 
panleft 单手指向下左滑动时触发 
panright 单手指向右滑动时触发 
panup 单手指向上滑动时触发 
pandown 单手指向下滑动时触发

2.缩放事件 (需要手动开启 ammertime.get(‘pinch‘).set({ enable: true });

选项 默认 描述
event pinch 事件名称
pointers 2 必需的指针,最小为2。
threshold 0 识别前的最小比例

pinch 手指缩放触发 
pinchstart 手指缩放开始时触发 
pinchmove 手指缩放时触发 
pinchend 手指缩放结束后触发 
pinchcancel 手指缩放事件被清除时触发 
pinchin 手指向内缩放时触发 
pinchout 手指向外缩放时触发

3.按压(长按)事件

选项 默认 描述
event press 事件名称
pointers 1 必需指针。0为所有指针。
threshold 9 按压时允许的最小移动。
time 251 压缩时间以毫秒为单位

press 手指按压时触发(默认按压251毫秒) 
pressup 手指按压结束时触发

4.旋转事件 (两个手指)

选项 默认 描述
event rotate 事件名称
pointers 2 必需的指针,最小为2。
threshold 0 识别前的最小比例

rotate 旋转触发 
rotatestart 旋转开始时触发 
rotatemove 旋转时触发 
rotateend 旋转结束时触发 
rotatecancel 旋转被移除时触发

5.滑屏事件

选项 默认 描述
event rotate 事件名称
pointers 1 必需的指针,最小为2。
threshold 10 识别前需要的最小距离。
direction DIRECTION_ALL 平移方向。
velocity 0.3 识别之前所需的最小速度,单位为px / ms。

swipe 滑屏触发 
swipeleft 左滑屏时触发 
swiperight 右滑屏时触发 
swipeup 上滑屏时触发 
swipedown 下滑屏时触发

小提示:当调用Hammer()创建一个简单的实例时,平移和滑动识别器被配置为仅检测水平手势。你需要这样去在垂直方向去配置:

hammertime.get(‘swipe‘).set({ direction: Hammer.DIRECTION_ALL });

6.tap点击事件

选项 默认 描述
event tap 事件名称
pointers 1 必需的指针
taps 1 所需的水龙头数量。
interval 300 多个水龙头之间的最大时间(以ms为单位)
time 250 最大按压时间(ms)。
threshold 2 在做点击时,允许一些小动作。
posThreshold 10 多个抽头之间的最大位置差异。

tap 点击事件 
doubletap 双击触发

重点内容 
以上事件中我们可以改变事件的默认状态,比如按压事件默认是251毫秒触发,我们可以改为1s后触发。

hammertime.get(‘press‘).set({ time:1000 });

五、事件对象

每个事件都存在事件对象:

hammertime.on("doubletap", function (e) {

   document.getElementById("result").innerHTML += e;
     var a = console.log(e);

});

事件对象中包含以下信息: 
Hammer触发的所有事件都会接收到包含以下属性的事件对象。

名称
type 事件名称 像panstart。
deltaX X轴的移动。
deltaY Y轴运动。
deltaTime 自第一次输入以来的总时间(毫秒)。
distance 距离移动
angle 角度移动。
velocityX 速度在X轴上,以px / ms为单位。
velocityY Y轴上的速度,以px / ms为单位
velocity Y轴上的速度,以px / ms为单位
direction 方向移动。匹配DIRECTION常数。
offsetDirection 方向从起点移开。匹配DIRECTION常数。
scale 多点触控时缩放。1单触。
rotation 多点触摸时已经完成的旋转(deg)。0单击。
center 多点触摸的中心位置,或只是单指针。
srcEvent 源事件对象,类型TouchEvent,MouseEvent或PointerEvent。
target 接收到事件的目标。
pointerType 主指针类型,可以是touch,mouse,pen或kinect。
eventType 事件类型,匹配INPUT常量。
isFirst true 当第一个输入。
isFinal true 当最后(最后)输入。
pointers 具有所有指针的数组,包括结束指针(touchend,mouseup)。
changedPointers 具有所有新/移动/丢失指针的数组。
preventDefault 参考srcEvent.preventDefault()方法。只有专家!
时间: 2024-11-03 22:51:18

移动端手势事件 hammer.JS插件的相关文章

iQuery移动端手势事件插件-jGestures

jGestures下载 jGestures事件简介 orientationchange 代表设备顺时针或者逆时针旋转.此事件可以被设备触发,可能使用的是重力传感器. pinch 缩放手势(两个手指在屏幕上的相对运动) rotate 旋转手势(两个手指顺时针或者逆时针旋转) swipemove 在正在滑动时触发(在设备屏幕上移动手指,比如:拖动) swipeone 单点滑动手势,滑动完成后触发(一个手指在屏幕上移动) swipetwo 两点滑动(两个手指在屏幕上方向一致的滑动) swipethre

Hammer.js移动端触屏框架的使用

hammer.js是一个多点触摸手势库,能够为网页加入Tap.Double Tap.Swipe.Hold.Pinch.Drag等多点触摸事件,免去自己监听底层touchstart.touchmove.touchend事件并且写一大堆判断逻辑的痛苦.hammer.js不但支持触摸屏设备的浏览器,在桌面浏览器上,也能将鼠标的点击当做触摸,方便开发人员在桌面浏览器上调试.这是一个专为触摸手势而生的js库,对有需要的朋友非常有帮助,奉上常用的一些方法调用文档. 使用方法: 1 2 3 4 5 6 7 8

不能遗忘移动端的手势事件

一直游离在pc端开发网站,当然也偶偶将网站制作成响应式的. 但是都没有研究过移动端的手势,上次在ctrip面试的一道题目如今还深深的刻在我的脑海中: 手机上的滑动事件该怎么处理,比如常见的app向右滑动出现菜单? 今天将hammer.js研究了一下,她主要是处理移动端的手势事件的,正如她的ad:Add touch gestures to your page. 我的思路: 1.当手指往右滑动时left块向右移动 2.当手指在红色的left向左滑动时left隐藏 代码如下: <!DOCTYPE ht

JS—触摸事件、手势事件

JS-触摸事件.手势事件 dbclick触屏设备不支持双击事件.双击浏览器窗口,会放大画面.可以通过在head标签内加上这么一行: <meta name="viewport" content="width=device-width, minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"> 可以实现,我们编写的页面不会随着用的手势而放大缩小.关于meta标签,我还没有研究过,罪过啊. mouse在触屏上

hammer.js的六大事件

1.Pan事件:在指定的dom区域内,一个手指放下并移动事件,即触屏中的拖动事件.这个事件在触屏开发中比较常用: Panstart 拖动开始 Panmove 拖动过程 Panend 拖动结束 Pancancel 拖动取消 Panleft 向左拖动 Panright 向右拖动 Panup 向上拖动 Pandown 向下拖动 2.Pinch事件: 在指定的dom区域内,两个手指(默认为两个手指,多指触控需要单独设置)或多个手指相对(越来越近)移动或相向(越来越远)移动时的事件: Pinstart 多

原生js移动端可拖动进度条插件

该插件最初的想法来自网上的一篇文章,直达链接:https://www.cnblogs.com/libin-1/p/6220056.html 笔者因为业务需要寻找到这个插件,然后拿来用之,发现各种不方便,然后便开始了改造之路. 上代码: 1 <script> 2 function dragSlide(id) { 3 this.minDiv =document.getElementById(id); //小方块 4 5 this.width = parseInt(window.getCompute

纯原生js移动端图片压缩上传插件

前段时间,同事又来咨询一个问题了,说手机端动不动拍照就好几M高清大图,上传服务器太慢,问问我有没有可以压缩图片并上传的js插件,当然手头上没有,别慌,我去网上搜一搜. 结果呢,呵呵...诶~又全是基于jquery.zepto的(这句话似乎吐槽次数太多了...),然后我也就不吐槽了, 然后当然是自己做了,先上图: 纯原生js的移动端图片压缩上传插件,不依赖任何库 用法 在html页面中引入input标签,通过自定义属性data-LUploader绑定点击触发的标签id,写法如下: <div cla

H5案例分享:移动端touch事件判断滑屏手势的方向

移动端touch事件判断滑屏手势的方向 方法一 当开始一个touchstart事件的时候,获取此刻手指的横坐标startX和纵坐标startY: 当触发touchmove事件时,在获取此时手指的横坐标moveEndX和纵坐标moveEndY;最后,通过这两次获取的坐标差值来判断手指在手机屏幕上的滑动方向. 思路:用touchmove的最后坐标减去touchstart的起始坐标,X的结果如果正数,则说明手指是从左往右划动:X的结果如果负数,则说明手指是从右往左划动:Y的结果如果正数,则说明手指是从

hammer.js实现移动端的拖放效果

hammer.js可以实现移动端的多种触摸效果.详细可以点击http://www.cnblogs.com/iamlilinfeng/p/4239957.html 不过发现hammer.js实现功能时,只能是原生js,jquery代码在hammer中不起效果. 一.引入hammer.js 下载http://hammerjs.github.io/ <script type="text/javascript" src="js/hammer.min.js">&l