前言:本人对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。

  1. var hammerObj=new Hammer(document.getElementById('main'));
  2. 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事件。

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

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事件是被禁止的,可以通过以下代码开启它。

  1. hammertime.get('pinch').set({ enable: true });
  2. hammertime.get('rotate').set({ enable: true });

一般情况下,浏览器是禁止屏幕上滑下滑事件的,因为浏览器默认的是上下滑动滚动页面,若要允许识别器识别垂直方位或全部方位的 pan 和 swipe,可以这么写:

  1. hammertime.get('pan').set({ direction: Hammer.DIRECTION_ALL });
  2. hammertime.get('swipe').set({ direction: Hammer.DIRECTION_VERTICAL });

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

  1. <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(捏合)事件同样会多次执行,所以新的方法还需要寻找。。。

  

    

    

hammer的初始化及移动端各种滑动的更多相关文章

  1. 移动端触摸滑动插件Swiper

    移动端触摸滑动插件Swiper 04/02/2015 一.了解Swiper 目前移动端项目一般都需要具有触屏焦点图的效果,如果你也需要实现这一功能的话,Swiper是一个不错的选择. 1.他不需要加载 ...

  2. 移动端tab滑动和上下拉刷新加载

    移动端tab滑动和上下拉刷新加载 查看demo(请在移动端模式下查看) 查看代码 开发该插件的初衷是,在做一个项目时发现现在实现移动端tab滑动的插件大多基于swiper,swiper的功能太强大而我 ...

  3. 原生 JS 实现移动端 Touch 滑动反弹

    什么是 Touch滑动?就是类似于 PC端的滚动事件,但是在移动端是没有滚动事件的,所以就要用到 Touch事件结合 js去实现,效果如下: 1. 准备工作 什么是移动端的 Touch事件?在移动端 ...

  4. 用css巧妙实现移动端横向滑动展示功能

    前言:记得以前处理移动端横向滑动展示都是去用js去解决的,要用js进行蛮多处理,要算li的宽度,然后还要用js设置ul盒子的宽度,又要设置最大滑动距离,最小滑动距离等等.......但是现在发现用cs ...

  5. swiper嵌套小demo(移动端触摸滑动插件)

    swiper(移动端触摸滑动插件) tip:自己敲得Swiper 的小demo,可以复制粘贴看看效果哦. swiper的js包css包下链接地址 :  https://github.com/Clear ...

  6. 自己用原生JS写的轮播图,支持移动端触摸滑动,分页器圆点可以支持mouseover鼠标移入和click点击,高手看了勿喷哈

    自己用原生JavaScript写的轮播图,分页器圆点按钮可支持click点击,也可支持mouseover鼠标悬浮触发,同时支持移动端触摸滑动,有兴趣的友友可以试试哈,菜鸟一枚,高手看了勿喷,请多多指正 ...

  7. 移动端touch滑动事件监听

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  8. 【css】用css巧妙实现移动端横向滑动展示功能

    前言:记得以前处理移动端横向滑动展示都是去用js去解决的,要用js进行蛮多处理,要算li的宽度,然后还要用js设置ul盒子的宽度,又要设置最大滑动距离,最小滑动距离等等.......但是现在发现用cs ...

  9. 测试:OGG初始化同步表,源端抽取进程scn<源端事务的start_scn时,这个变化是否会同步到目标库中?

    一.测试目标 疑问,OGG初始化同步表,源端抽取进程开始抽取的scn<源端事务的start_scn时,这个变化是否会同步到目标库中? 二.实验测试 如下进行测试! session 1 SQL&g ...

随机推荐

  1. 一名合格的JAVA程序员需要点亮那些技能树?

    这是从450家企业的招聘信息中统计而来,相对来说还是比较真实的,虽然有些公司的招聘要求万年不变,但还是可以大致反应企业的招聘要求的. 尽管Struts2漏洞频出,但是由于政府.银行以及传统企业遗留项目 ...

  2. java学习笔记 --- 继承

    继承 (1)定义:把多个类中相同的成员给提取出来定义到一个独立的类中.然后让这多个类和该独立的类产生一个关系,    这多个类就具备了这些内容.这个关系叫继承.  (2)Java中如何表示继承呢?格式 ...

  3. Struts2的validator和WEB-INF下页面交互以及路径问题

    当我使用短路校验器时(客户端),在页面下方老是出来 FreeMarker template error!然后我就把我的页面都放在了WEB-INF中,结果很多路径都不对了,因为客户端是没有直接访问Str ...

  4. supervisor的集中化管理搭建

    1.supervisor很不错,可惜是单机版,所以上github上找了个管理工具supervisord-monitor. github地址: https://github.com/mlazarov/s ...

  5. 使用$.post和action或servlet交互 URL出现 http://localhost:8080/../[object%20Object] 错误的问题解决

    使用$.post时,如下所示: $.post({ url : "./test/ajaxTest", }); 控制台报:There is no Action mapped for n ...

  6. Android Google AdMob 广告接入示例

    Android Google AdMob 广告接入示例 [TOC] 首先请大家放心,虽然 Google搜索等服务被qiang了,但是 广告服务国内还是可以用的,真是普天同庆啊~~~噗! 其实这篇文章也 ...

  7. Springboot在IDEA中执行,开启热部署

    仅适用IDEA中,eclipse中不需要设置 一.开启idea自动make功能 1 - Enable Automake from the compiler PRESS: CTRL + SHIFT + ...

  8. 在开源中国(oschina)上创建托管项目

    ***************************************************************** 目标: 1.能上传自己的项目到oschina上并且进行管理 2.能进 ...

  9. VS窗体选择BackGroupImage属性报错:已添加具有相同键的项

    高墙我今天第一次遇见这个问题.既然说是"已添加具有相同键的项."那我自然地认为会不会是文件夹哪里命名了两个相同的文件名.然后在这个Exception上越走越远. 好了不说废话.出现 ...

  10. Android -- 贝塞尔二阶实现饿了么加入购物车效果

    1,上周我们实现了简单的三阶贝塞尔曲线效果实例,今天是使用二阶贝塞尔曲线加动画实现的加入购物车效果,在码代码过程中出现了些问题,过一下和大家来探讨探讨,先看一下效果图 2,从上面的效果来看我们基本上可 ...