浅谈移动端之js touch事件 手势滑动事件


Posted in Javascript onNovember 07, 2016

现分享一篇关于touch的文章,望指教!

原理:

当开始一个touchstart事件的时候,获取此刻手指的横坐标startX和纵坐标startY;
当触发touchmove事件时,在获取此时手指的横坐标moveEndX和纵坐标moveEndY;最后,通过这两次获取的坐标差值来判断手指在手机屏幕上的滑动方向。
具体代码如下:

$("body").on("touchstart", function(e) {
 e.preventDefault();
 startX = e.originalEvent.changedTouches[0].pageX,
 startY = e.originalEvent.changedTouches[0].pageY;
});
$("body").on("touchmove", function(e) {
 e.preventDefault();
 moveEndX = e.originalEvent.changedTouches[0].pageX,
 moveEndY = e.originalEvent.changedTouches[0].pageY,
 X = moveEndX - startX,
 Y = moveEndY - startY;
 
 if ( X > 0 ) {
  alert("left 2 right");
 }
 else if ( X < 0 ) {
  alert("right 2 left");
 }
 else if ( Y > 0) {
  alert("top 2 bottom");
 }
 else if ( Y < 0 ) {
  alert("bottom 2 top");
 }
 else{
  alert("just touch");
 }
});

总结:touchmove的最后坐标减去touchstart的起始坐标。

X的结果如果正数,则说明手指是从左往右划动;
X的结果如果负数,则说明手指是从右往左划动;
Y的结果如果正数,则说明手指是从上往下划动;
Y的结果如果负数,则说明手指是从下往上划动。
坑开始了……
理想很丰满,显示很骨感!在实际的操作中,手指的上下滑动很难做到直上直下,只要稍微有点斜,只要稍微有点斜,就会被X轴的判断先行接管,而与我们实际的操作意愿相背离。此时就需要添加特殊的判断技巧,代码如下:

$("body").on("touchstart", function(e) {
 e.preventDefault();
 startX = e.originalEvent.changedTouches[0].pageX,
 startY = e.originalEvent.changedTouches[0].pageY;
});
$("body").on("touchmove", function(e) {
 e.preventDefault();
 moveEndX = e.originalEvent.changedTouches[0].pageX,
 moveEndY = e.originalEvent.changedTouches[0].pageY,
 X = moveEndX - startX,
 Y = moveEndY - startY;
  
 if ( Math.abs(X) > Math.abs(Y) && X > 0 ) {
  alert("left 2 right");
 }
 else if ( Math.abs(X) > Math.abs(Y) && X < 0 ) {
  alert("right 2 left");
 }
 else if ( Math.abs(Y) > Math.abs(X) && Y > 0) {
  alert("top 2 bottom");
 }
 else if ( Math.abs(Y) > Math.abs(X) && Y < 0 ) {
  alert("bottom 2 top");
 }
 else{
  alert("just touch");
 }
});

以上代码,在测试时仍不能达到预期的效果,此时要注意到一个事实--$('body').height = 0(此处是个大坑,但有时也不会出现,望大神指教)
故还应该在此基础上添加一下代码:

var windowHeight = $(window).height(),
   $body = $("body");
  // console.log($(window).height());
  // console.log($('body').height());
  $body.css("height", windowHeight);

 到此,已实现了手机移动端手指的上滑、下滑、左滑和右滑操作。

一些浅显的理解,望大神指教鞭策!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript 汉字字节判断
Aug 01 Javascript
Jquery作者John Resig自己封装的javascript 常用函数
Nov 09 Javascript
JQuery.Ajax之错误调试帮助信息介绍
Jul 04 Javascript
Js参数值中含有单引号或双引号问题的解决方法
Nov 06 Javascript
JavaScript数组常用方法
Mar 02 Javascript
jQuery实现类似老虎机滚动抽奖效果
Aug 06 Javascript
AngularJS实现单独作用域内的数据操作
Sep 05 Javascript
解析javascript图片懒加载与预加载的分析总结
Oct 27 Javascript
AngularJS中$http使用的简单介绍
Mar 17 Javascript
jQuery实现在HTML文档加载完毕后自动执行某个事件的方法
May 08 jQuery
浅谈开发eslint规则
Oct 01 Javascript
学习RxJS之JavaScript框架Cycle.js
Jun 17 Javascript
jquery获取table指定行和列的数据方法(当前选中行、列)
Nov 07 #Javascript
AngularJS实现Input格式化的方法
Nov 07 #Javascript
AngularJS自定义插件实现网站用户引导功能示例
Nov 07 #Javascript
webpack常用配置项配置文件介绍
Nov 07 #Javascript
jQuery Mobile和HTML5开发App推广注册页
Nov 07 #Javascript
学习JavaScript图片预加载模块
Nov 07 #Javascript
pc加载更多功能和移动端下拉刷新加载数据
Nov 07 #Javascript
You might like
DOM XPATH获取img src值的query
2013/09/23 PHP
php递归法读取目录及文件的方法
2015/01/30 PHP
php检测图片主要颜色的方法
2015/07/01 PHP
PHP链表操作简单示例
2016/10/15 PHP
javascript实现div的拖动并调整大小类似qq空间个性编辑模块
2012/12/12 Javascript
js加强的经典分页实例
2013/03/15 Javascript
Javascript 数组排序详解
2014/10/22 Javascript
JavaScript开发Chrome浏览器扩展程序UI的教程
2016/05/16 Javascript
jquery实现上传文件大小类型的验证例子(推荐)
2016/06/25 Javascript
ES6所改良的javascript“缺陷”问题
2016/08/23 Javascript
JS实现简单易用的手机端浮动窗口显示效果
2016/09/07 Javascript
微信小程序 wx.uploadFile在安卓手机上面the same task is working问题解决
2016/12/14 Javascript
Vue.directive自定义指令的使用详解
2017/03/10 Javascript
underscore之Collections_动力节点Java学院整理
2017/07/10 Javascript
利用Three.js如何实现阴影效果实例代码
2017/09/26 Javascript
值得收藏的vuejs安装教程
2017/11/21 Javascript
Vue2.2.0+新特性整理及注意事项
2018/08/22 Javascript
详解nuxt路由鉴权(express模板)
2018/11/21 Javascript
js前端面试之同步与异步问题详解
2019/04/03 Javascript
vue 设置 input 为不可以编辑的实现方法
2019/09/19 Javascript
python中的hashlib和base64加密模块使用实例
2014/09/02 Python
Python编程中的反模式实例分析
2014/12/08 Python
python selenium UI自动化解决验证码的4种方法
2018/01/05 Python
python3 图片referer防盗链的实现方法
2018/03/12 Python
python去除扩展名的实例讲解
2018/04/23 Python
python开启debug模式的方法
2019/06/27 Python
水污染治理专业毕业生推荐信
2013/11/14 职场文书
团委书记的竞聘演讲稿
2014/04/24 职场文书
村党支部换届选举方案
2014/05/02 职场文书
我的未来不是梦演讲稿
2014/09/02 职场文书
个人贷款授权委托书样本
2014/10/07 职场文书
2016优秀教师先进个人事迹材料
2016/02/25 职场文书
广播稿:校园广播稿范文
2019/04/17 职场文书
QT连接MYSQL数据库的详细步骤
2021/07/07 MySQL
Golang原生rpc(rpc服务端源码解读)
2022/04/07 Golang
Win11开始菜单添加休眠选项
2022/04/19 数码科技