前言:本人对hammer了解不是很多,早做项目时遇到了手机端的一些滑动事件,特此分析下hammer的某些属性。

hammer.js是一款开源的移动端脚本框架,他可以完美的实现在移端开发的大多数事件,如:点击、滑动、拖动、多点触控等事件。Hammer.js不需要依赖任何其他的js框架,并且整个框架非常小,v2.0.4版本只有3.96kb。

1、hammer.js引用

可直接引入文件,也可以引入CDN地址。在这里,为了方便,我引入了JQuery框架。

hammer的在线CDN地址为:<script src="http://eightmedia.github.com/hammer.js/hammer.js"></script>

2.hammer的事件绑定

hammer的事件绑定方法是新建一个Hammer对象,并传入要操作的DOM,必须使用原始DOM,即使用这两种方法获取DOM。

    var hammerObj=new Hammer(document.getElementById('main'));var hammerObj=new Hammer($('#main').get(0));

3、hammer支持的事件

pan事件

主要支持在当前dom区域内的一个手指放下并移动事件,即屏幕滑动事件,其中包括左滑动、右滑动、上滑动、下滑动,该事件还可以对以下事件进行监听或处理:

panstart:拖动开始、panmove:拖动过程、panend:拖动结束、pancancel:拖动取消、panleft:向左拖动、panright:向右拖动、panup:向上拖动、pandown:向下拖动

panstart事件

会在event对象中输出滑动开始的坐标

panmove事件

一次滑动会触发多次panmove事件,会在direction中输出方向,当direction等于16时,为向下滑动,当direction等于8时,为向上滑动,当direction等于4时,为向右滑动,当direction等于2时,为向左滑动。

panend事件

滑动结束,一次滑动只会执行一次,同样在direction中输出方向,当direction等于16时,为向下滑动,当direction等于8时,为向上滑动,当direction等于4时,为向右滑动,当direction等于2时,为向左滑动。

pancancel事件

滑动取消,不知道何时触发。

panleft事件

向左滑动,一次滑动多次触发,其中垂直上下滑动不会触发,滑动时向左有一定偏移量的时候会触发。

panright事件

向右滑动,一次滑动多次触发,其中垂直上下滑动不会触发,滑动时向右有一定偏移量的时候会触发。

panup事件

向上滑动,一次滑动多次触发,其中水平左右滑动不会触发,滑动时向上有一定偏移量的时候会触发。

pandown事件

向下滑动,一次滑动多次触发,其中水平左右滑动不会触发,滑动时向下有一定偏移量的时候会触发。

pinch事件

主要支持在当前dom区域内的多个手指(默认两个手指,多个手指需要单独设置)的相对移动和相向移动,该事件还可以对以下事件进行处理或者监听:

pinchstart:多点触控开始、pinchmove:多点触控过程、pinchend:多点触控结束、pinchcancel:多点触控取消、pinchin:多点触控时两手指距离越来越近(缩小)、pinchout:多点触控时两手指距离越来越远(放大),其触发事件如pan事件。

    var hammertime = new Hammer(document.getElementById("body"));hammertime.add(new Hammer.Pinch());hammertime.on("pinchin", function (e) {swit();});

Press事件(长按)

主要支持在当前的dom区域内触屏版本的点击事件,这个事件相当于PC端的Click事件,该不能包含任何的移动,最小按压时间为500毫秒,常用于我们在手机上用的“复制、粘贴”等功能,该事件分别对以下事件进行监听并处理:

pressup:按压事件离开时触发

该事件不存在pressdown事件,具体是否支持按压开始未知。

rotate事件

主要支持在当前的dom区域内,当两个手指或更多手指成圆型旋转时触发(就像两个手指拧螺丝一样)。该事件分别对以下事件进行监听并处理:

rotatestart:旋转开始、rotatemove:旋转过程、rotateend:旋转结束、rotatecancel:旋转取消

swipe事件

主要支持在当前的dom区域内,一个手指快速的在触屏上滑动。即我们平时用到最多的滑动事件。

swipeleft:向左滑动、swiperight:向右滑动、swipeup:向上滑动、swipedown:向下滑动

该事件只有在垂直上下滑动或水平左右滑动时触发,即滑动时如果倾斜太大角度则不会触发,触发条件比较苛刻。

tap事件

主要支持在当前的dom区域内,一个手指轻拍或点击时触发该事件(类似PC端的click)。该事件最大点击时间为250毫秒,如果超过250毫秒则按Press事件进行处理。

注意

默认情况下pinch和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 });

另建议加上如下meta标签,防止doubletap 或 pinch 缩放了viewport:

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

4、hammer滑动事件执行多次处理方法

在滑动事件执行后,我们一般会执行一个函数或者对dom进行操作,hammer事件多次执行,有时候会使函数多次执行或多次dom操作,由于我现在做的项目滑动之后执行的操作是需要一段时间的,所以采用设置一个全局变量作为函数执行开关的方法进行阻止,hammer应该提供了自己的方法,但我还不知道,望知道的小伙伴可以告诉我。

 1 <script type="text/javascript">
 2     var hammerObj=new Hammer(document.getElementById('main'));
 3     var _clock=true;
 4     function foo(){
 5         alert("OK");
 6         _clock=true;
 7     }
 8     hammerObj.on('panmove',function(event){
 9         if(_clock){
10             _clock=false;
11             foo();
12         }
13     });
14 </script>

但是这种方法只有在滑动后执行函数或操作存在一定时间才可以,比如alert()换成console.log()就会多次输出,没有办法解决这个问题。

其实pan事件我们完全不需要使用panmove来实现,可以采用panend,同样可以输出不同方向然后进行判断,但pinchin(捏合)事件同样会多次执行,所以新的方法还需要寻找。。。

  

    

    

转载于:https://www.cnblogs.com/abuc/p/5810816.html

hammer的初始化及移动端各种滑动相关推荐

  1. 移动端 touch 滑动事件

    移动端触屏滑动的效果其实就是图片轮播,在PC的页面上很好实现,绑定click和mouseover等事件来完成.但是在移动设备上,要实现这种轮播的效果,就需要用到核心的touch事件.处理touch事件 ...

  2. 关于移动端上下滑动卡顿不流畅现象的解决方案

    关于移动端上下滑动卡顿不流畅现象的解决方案 参考文章: (1)关于移动端上下滑动卡顿不流畅现象的解决方案 (2)https://www.cnblogs.com/sherryweb/p/11269973 ...

  3. 【Android 逆向】Android 逆向通用工具开发 ( PC 端工程分析 | 网络初始化操作 | PC 端工程核心业务逻辑 )

    文章目录 前言 一.网络初始化操作 二.PC 端工程核心业务逻辑 三.博客资源 前言 本篇博客重点分析 PC 端 hacktool 模块 ; 一.网络初始化操作 HackCommand::Prepar ...

  4. android 横向滑动日期_移动端横向滑动如何设计?

    所谓的"左右横滑"交互英文名叫做"Horizontal Scrolling Lists",最早可能起源于 Windows Phone 的横向内容滑动设计.用于在 ...

  5. 使用hammer.js实现移动端手指滑动切换轮播图教程

    今天面试前端开发时,要求在移动端实现手指滑动切换轮播图 这里我用到 bootsrap 的轮播图组件 + hammer.js 库 文章参考: Hammer.js - 李林峰的园子 - 博客园 (cnbl ...

  6. 【Android 逆向】Android 逆向通用工具开发 ( 网络模块开发 | SOCKET 网络套接字初始化 | 读取远程端 “Android 模拟器“ 信息 | 向远程端写出数据 )

    文章目录 前言 一.SOCKET 网络套接字初始化 二.SOCKET 网络套接 读取远程端 ( Android 模拟器 ) 信息 三.SOCKET 网络套接 向远程端 ( Android 模拟器 ) ...

  7. 移动端页面滑动事件穿透问题及其解决方案

    滑动事件穿透: 在一个可滚动的列表页中打开弹窗,底部的页面理论上是不可滚动的,但是当滑动弹窗时,底部页面会跟随滚动,这就是所谓的页面滚动穿透的问题. 解决方案一: 当弹窗显示时,在父元素上添加fix类 ...

  8. 移动端上下拖动调整顺序效果_移动端上下滑动事件之--坑爹的touch.js

    移动端页面的盛行,微信的便利的页面推广等等,让越来越多的css3效果和html5在手机端大放异彩. 于是乎,各式各样的简约酷炫的html5页面层出不穷,最多的就是视差滚动+css3动画. 接下来就说说 ...

  9. 手机HTML拼图验证,jQuery支持移动端的滑动块拼图验证插件

    注:chrome本地预览有错位问题需要在服务端演示正常,本地预览请用火狐浏览器. jq_slideImage 使用 var mySlideImage = new SlideImageVerify('# ...

  10. 移动端手指滑动的距离

    function wetherScroll(){var startX = startY = endX =endY =0;document.addEventListener('touchstart',f ...

最新文章

  1. AS1.0(2.0)中的XML示例
  2. 【Android必备】与其他碎片进行通信(10)
  3. golang 接口类型 interface 简介
  4. ssd手 和方向检测
  5. python爬虫教程下载-Python爬虫入门教程!手把手教会你爬取网页数据
  6. Java实现算法导论中KMP字符串匹配算法
  7. SpringBoot整合RabbitMQ测试
  8. android封装好的Color类中的常量
  9. 计算机中 amp 是什么符号,这里面的amp;amp;,||是什么意思,相当与数学里面的什么符号?...
  10. mongoose在子文档的array里update或insert
  11. expat 处理xml常用函数名
  12. Nginx配置与安装及发布项目
  13. 深度步态识别综述(三)
  14. python声纹识别_声纹识别算法、资源与应用(二)
  15. 南开计算机考研真题,(NEW)南开大学《812计算机综合基础》历年考研真题汇编(83页)-原创力文档...
  16. 跨平台iOS自动化测试工具——tidevice
  17. 使用正则表达式批量去除第一个逗号前的内容(含逗号)以及去除最后一个逗号后面的内容
  18. 中山大学学报(自然科学版)Latex模板(非官方)
  19. Vue初入,了解Vue的发展与优缺点
  20. 青职院人工智能01数学基础(一)

热门文章

  1. 十六、Oracle学习笔记:索引和约束(表字段快速查询和约束)
  2. Arthas 实战,助你解决同名类依赖冲突问题
  3. Java 序列化漏洞多到修不完
  4. C语言w10输入法打不出中文,win10系统输不了中文怎么办
  5. 阶段5 3.微服务项目【学成在线】_day05 消息中间件RabbitMQ_3.RabbitMQ研究-工作原理...
  6. 阶段5 3.微服务项目【学成在线】_day03 CMS页面管理开发_12-删除页面-服务端-接口开发...
  7. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_05 IO字符流_5_flush方法和close方法的区别...
  8. DRF + react 实现TodoList
  9. Python 最抢手、Java 最流行,前线程序员揭秘 2019 软件开发现状
  10. android源码 分享1