浅谈移动端之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 相关文章推荐
火狐浏览器(firefox)下获得Event对象以及keyCode
Nov 13 Javascript
js去字符串前后空格5种实现方法及比较
Apr 03 Javascript
IE网页js语法错误2行字符1、FF中正常的解决方法
Sep 09 Javascript
基于JavaScript实现瀑布流布局(二)
Jan 26 Javascript
Bootstrap基本组件学习笔记之列表组(11)
Dec 07 Javascript
微信小程序实战之运维小项目
Jan 17 Javascript
jQuery实现鼠标跟随效果
Feb 20 Javascript
详解Node.js实现301、302重定向服务
Apr 07 Javascript
vue基础之data存储数据及v-for循环用法示例
Mar 08 Javascript
vue项目打包后怎样优雅的解决跨域
May 26 Javascript
vue路由切换之淡入淡出的简单实现
Oct 31 Javascript
node中使用shell脚本的方法步骤
Mar 23 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
php xfocus防注入资料
2008/04/27 PHP
DISCUZ在win2003环境下 Unable to access ./include/common.inc.php in... 的问题终极解决方案
2011/11/21 PHP
PHP中echo,print_r与var_dump区别分析
2014/09/29 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
2018/06/13 PHP
js form action动态修改方法
2008/11/04 Javascript
javascript 模拟点击广告
2010/01/02 Javascript
在一个浏览器里呈现所有浏览器测试结果的前端测试工具的思路
2010/03/02 Javascript
js点击列表文字对应该行显示背景颜色的实现代码
2015/08/05 Javascript
AngularJS进行性能调优的7个建议
2015/12/28 Javascript
JavaScript函数中关于valueOf和toString的理解
2016/06/14 Javascript
seajs模块之间依赖的加载以及模块的执行
2016/10/21 Javascript
移动设备手势事件库Touch.js使用详解
2017/08/18 Javascript
在 Typescript 中使用可被复用的 Vue Mixin功能
2018/04/17 Javascript
react中实现搜索结果中关键词高亮显示
2018/07/31 Javascript
跨域请求两种方法 jsonp和cors的实现
2018/11/11 Javascript
vue强制刷新组件的方法示例
2019/02/28 Javascript
基于element-ui封装可搜索的懒加载tree组件的实现
2020/05/22 Javascript
浅谈vue中$bus的使用和涉及到的问题
2020/07/28 Javascript
python实现多线程暴力破解登陆路由器功能代码分享
2015/01/04 Python
python类继承用法实例分析
2015/05/27 Python
利用Python写一个爬妹子的爬虫
2018/06/08 Python
pyside+pyqt实现鼠标右键菜单功能
2020/12/08 Python
Python常见数字运算操作实例小结
2019/03/22 Python
Python 等分切分数据及规则命名的实例代码
2019/08/16 Python
PyTorch中 tensor.detach() 和 tensor.data 的区别详解
2020/01/06 Python
浅析python 动态库m.so.1.0错误问题
2020/05/09 Python
Python3批量创建Crowd用户并分配组
2020/05/20 Python
通过实例了解python__slots__使用方法
2020/09/14 Python
英国领先的野生鸟类食品供应商:GardenBird
2018/08/09 全球购物
口腔工艺技术专业毕业生自荐信
2013/09/27 职场文书
大学校务公开实施方案
2014/03/31 职场文书
学雷锋感言
2015/08/03 职场文书
趣味运动会广播稿
2015/08/19 职场文书
经典人生语录分享:不畏将来,不念过去,笑对当下
2019/12/12 职场文书
详解OpenCV曝光融合
2022/04/29 Python
Spring Cloud OAuth2实现自定义token返回格式
2022/06/25 Java/Android