现在移动端这么普及呢,我们在手机上可以操作更多了。对于网页来说实现一些丰富的操作感觉也是非常有必要的,对吧(如果你仅仅需要click,,那就当我没说咯。。。)~~比如实现上下,左右滑动,点击之类的,加上这些东西就感觉网页会库不少呢~~(舒服)。当然啦。原生javascript并没有为我们提供这些花里胡哨的东西,需要我们自己去实现下喽。又当然,,现在还是有许多js手势库的,比如hammer.js之类的。但是,学习是一个重复造轮子的过程(不知道那位伟人所多,如果无人认领,那就是我说的~~~~~~~~~)对吧。自己造个轮子玩,可能不能用在跑车上,但或许用在拖拉机上不错也说不定喽.

  好啦,好啦,前戏就这么多。下面就是主题啦。。说说实现一个自己的手势库。我把它叫做base-gesture.js 传送门在次:gesture(GitHub。。。star一下可好)

  然后嘞,讲讲思路喽。(仅仅是我个人的想法。。不做任何保证,也不负责。打我呀~)一个小起点,在移动端呢,如果使用click会有个300ms延迟,原因是移动端需要一个双击放大的判断,所以导致这个问题,具体点可以自己gooole或百度.为了避免这个问题我们就需要对touchstart,touchend这两个事件进行监听,已实现一个tap事件。然后你有非常好学,去百度了下,发现它们还有一个touchmove兄弟事件存在。。在我看来这三兄弟和mousedown,mouseup,mousemove贼像,那我们就可以利用这三个事件来实现一些基本的手势操作了。我实现呢。主要是在touchstart得时候记录一个startX,和一个startY就是起始位置啦。然后在touchmove时候在记录一个endX和一个ewndY。现在我们有两个点的坐标了哦。那就好说了,稍微运用下数学知识求下两点之间的夹角,有这个夹角了,你在判断下endX-startX以及endY-startY的正负你就可以基本实现了判断上,下左右滑动了哦~~还行吧

  当然,有这些还是不够的,我们知道,(你必须知道)touchstart只在按下屏幕那一刻触发,这就导致startX与startY只要手指不松开,它就不会变,而这个直接导致的问题就是,你左划后再继续右划,之前的判断方法依然判断为左划,,直到到你右划过了起始点。哇,这个问题就很尴尬了。。简直是废的喽。这就需要解决下喽。我呢,决定多加几个参数辅助下喽,第一组就是compareX和compareY他们在touchstart时候初始化和startx和starty值一样喽,需要他们呢主要是不希望startX和startY值不要变(后面还有用),他们就替代去完成一些任务,在touchmove可能就会更新它们的值(中途方向改变的时候)。然后就是两个数组了,gatherX以及gatherY。他们的第一位保存的是上一次触发touchmove时候记录的endX/Y-compareX/Y的值,第二位保存的是当前endX/Y-compareX/Y的值,这个时候我们就要判断gatherX/Y[1]-gatherX/Y的时候大小了,如果它小于零,恭喜你,它方向改变了(不知道有没有讲清楚,大概意识就是你从家里出去一直向外走了100米记录保存在gatherX/Y第一位上,下一秒这个距离变成94米了,保存在第二位上,一减小于零,说明你回头走了呀)。这个时候,把compareX/Y等于endX/endY表示一个新的手势的起点,然后gatherX/gatherY清空,这样就基本实现了,就算它中途非常手贱的不停移动,也没问题,也能触发正确对应事件。

  基本的框架能思路就是这样了,他至少能判断上下左右滑动了。当然为了让它实用一点我为event加了两个属性,event.gapX/Y表示距离上一次触发touchmove在X/Y轴上滑动的距离,以及evnt.moveX/Y表示手势结束到手势开始的位置的距离。这两个还是非常有用的。。至少我这么认为(因为是本宝宝想的~~)。有了这些主要思路,接下来你就给他们封装性下,实现个小插件就可以了啊,上面右地址,你可以直接看,readme感觉基本上也都血比较清楚(感觉有点乱~~~),请务必提意见以及发现的问题啊,大家一起学习。我呢,用自己的轮子造了两辆破车,破车1,破车2(绝对正经私家车)。第二个例子就是一个类似整页上划的东西啦。

  对了,还实现了对鼠标的支持,思路一样啦,就是该成相应的mouse事件就可以啦,就这些啦,希望大家一起进步与完善,让这个轮子更牛逼,说不定那天能成为跑车主胎呢(好吧,可能脑子太困糊涂了)。共勉啦,欢迎提问,以及拍砖哦

  

实现一个javascript手势库 -- base-gesture.js的更多相关文章

  1. 意外作出了一个javascript的服务器,可以通过js调用并执行任何java(包括 所有java 内核基本库)及C#类库,并最终由 C# 执行你提交的javascript代码! 不敢藏私,特与大家分

    最近研发BDC 云开发部署平台的数据路由及服务管理器意外作出了一个javascript的服务器,可以通过js调用并执行任何java(包括 所有java 内核基本库)及C#类库,并最终由 C# 执行你提 ...

  2. 我发起并创立了一个 Javascript 前端库 开源项目 jWebForm

    在线演示地址: ( 在线演示 云平台 由 Kooboo 提供  https://www.kooboo.com/ ) 按钮:      http://iwebform.kgeking.kooboo.si ...

  3. 强悍的javascript手势库

    /** * Toucher * git:https://github.com/cometwo/Toucher-1 */ "use strict"; (function (root, ...

  4. 推荐一个 JavaScript 日期处理类库 Moment.js

    官网: http://momentjs.com/ 处理时间的展示,很方便. 安装 bower install moment --save # bower npm install moment --sa ...

  5. 前端开发者常用的9个JavaScript图表库

    当前,数据可视化已经成为数据科学领域非常重要的一部分.不同网络系统中产生的数据,都需要经过适当的可视化处理,以便更好的呈现给用户读取和分析. 对任何一个组织来说,如果能够充分的获取数据.可视化数据和分 ...

  6. JavaScript工具库

    jPublic 交流QQ群:1017567122 前言 在我们开发项目的时候,无论项目规模大小,在所难免会写一些工具型函数来解决一些问题,随着项目开发和维护的时间越来越长,这些工具型函数会越来越多,同 ...

  7. three.js - 一个javascript 3D代码库

    这个项目的目的是用最简单的开发模式创建一个轻量级的3 d代码库,这个js库提供了canvas,svg,css3d和webgl这四种渲染方式. 下载地址: 下载地址:https://github.com ...

  8. 移动端手势库Hammer.js学习

    感觉移动端原生支持的 touch.tap.swipe 几个事件好像还不够用,某些时候还会用到诸如缩放.长按等其他功能. 近日学习了一个手势库 Hammer.js,它是一个轻量级的触屏设备手势库,能识别 ...

  9. Javascript触屏手势库-JTouch(更新V1.1)

    作者:痞子|时间:2013-05-21|分类目录:js,javascript,jquery教程|Tag标签: javascript.jTouch|阅读(857) 7 条评论 Javascript触屏手 ...

随机推荐

  1. DCalendar增加月份选择功能--简单jQuery日期选择器插件改动

    做时间插件的时候,很多都会遇到要做选择月份的插件,但是DCalendar提供的api只支持日期选择,最近遇到这个问题,所以调整了一下源码,话不多说,先看效果吧 点击日期插件,出现上图,再点击月份就直接 ...

  2. POJ1006: 中国剩余定理的完美演绎(非原创)

    问题描述 人自出生起就有体力,情感和智力三个生理周期,分别为23,28和33天.一个周期内有一天为峰值,在这一天,人在对应的方面(体力,情感或智力)表现最好.通常这三个周期的峰值不会是同一天.现在给出 ...

  3. PS不能存储,因为程序错误

    当PS中遇到不能存储文件,因为程序错误时,可以这样: http://www.zcool.com.cn/article/ZMTgwOTQw.html

  4. linux三剑客之sed命令

    一.前言 我们都知道,在Linux中一切皆文件,比如配置文件,日志文件,启动文件等等.如果我们相对这些文件进行一些编辑查询等操作时,我们可能会想到一些vi,vim,cat,more等命令.但是这些命令 ...

  5. AMD及requireJS

    前面的话 由CommonJS组织提出了许多新的JavaScript架构方案和标准,希望能为前端开发提供统一的指引.AMD规范就是其中比较著名一个,全称是Asynchronous Module Defi ...

  6. 深入理解Struts2----数据校验

    在表现层的数据处理方面主要分为两种类型,一种是类型转换,这点我们上篇已经简单介绍过,另外一种则是我们本篇文章将要介绍的:数据校验.对于我们的web应用,我们经常需要和用户进行交互收集用户信息,那么无论 ...

  7. 10、借助POI实现Java生成并打印excel报表(1)

    10.1.了解 Apache POI 实际开发中,用到最多的是把数据库中数据导出生成报表,尤其是在生产管理或者财务系统中用的非常普遍.生成报表格式一般是EXCEL或者PDF .利用Apache  PO ...

  8. Spring Boot 学习(1)

    文 by / 林本托 Tip 做一个终身学习的人. Spring Boot 初体验 Spring Boot 包含了很多 start(Spring boot 中 的叫法,就是一个模块,后文统一称模块,便 ...

  9. 《安卓网络编程》之第三篇 使用Apache接口

    在Android系统中,提供了一下三种通信接口: 标准的Java 接口:java.net Apache接口:org.apache.http Android网络接口:android.net.http 在 ...

  10. 在微信小程序中学习flex布局

    网页布局(layout)是CSS的一个重点应用. 布局的传统解决方案,基于盒状模型,依赖display属性 + position属性 + float属性.它对于那些特殊布局非常不方便,比如,垂直居中就 ...