浅谈移动端之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中JS读取XML文件
Dec 21 Javascript
JQuery Ajax 跨域访问的解决方案
Mar 12 Javascript
javascript模拟地球旋转效果代码实例
Dec 02 Javascript
jquery实现导航固定顶部的效果仿蘑菇街
Oct 22 Javascript
jQuery创建DOM元素实例解析
Jan 19 Javascript
JavaScript中实现继承的三种方式和实例
Jan 29 Javascript
Jquery时间轴特效(三种不同类型)
Nov 02 Javascript
jQuery实现拖拽可编辑模块功能代码
Jan 12 Javascript
JavaScript实现无刷新上传预览图片功能
Aug 02 Javascript
jQuery 实时保存页面动态添加的数据的示例
Aug 14 jQuery
Vue 中如何正确引入第三方模块的方法步骤
May 05 Javascript
JS实现横向轮播图(中级版)
Jan 18 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+Mysql日期时间如何转换(UNIX时间戳和格式化日期)
2012/07/15 PHP
php批量更改数据库表前缀实现方法
2013/10/26 PHP
laravel框架关于搜索功能的实现
2018/03/15 PHP
php微信公众号开发之图片回复
2018/10/20 PHP
4种Windows系统下Laravel框架的开发环境安装及部署方法详解
2020/04/06 PHP
javascript的事件描述
2006/09/08 Javascript
用JavaScript脚本实现Web页面信息交互
2006/12/21 Javascript
javascript 年月日联动实现核心代码
2009/12/21 Javascript
用JQUERY增删元素的代码
2012/02/14 Javascript
简介AngularJS的HTML DOM支持情况
2015/06/17 Javascript
解析JavaScript的ES6版本中的解构赋值
2015/07/28 Javascript
jQuery代码实现对话框右上角菜单带关闭×
2016/05/03 Javascript
ionic cordova一次上传多张图片(类似input file提交表单)的实现方法
2016/12/16 Javascript
JS实现改变HTML上文字颜色和内容的方法
2016/12/30 Javascript
javascript使用递归算法求两个数字组合功能示例
2017/01/03 Javascript
js 两个日期比较相差多少天的实例
2017/10/19 Javascript
微信小程序判断页面是否从其他页面返回的实例代码
2019/07/03 Javascript
vue transition 在子组件中失效的解决
2019/11/12 Javascript
基于vue-cli3创建libs库的实现方法
2019/12/04 Javascript
详解vuejs中执行npm run dev出现页面cannot GET/问题
2020/04/26 Javascript
python装饰器实例大详解
2017/10/25 Python
基于keras输出中间层结果的2种实现方式
2020/01/24 Python
DRF框架API版本管理实现方法解析
2020/08/21 Python
Django配置跨域并开发测试接口
2020/11/04 Python
Pytorch模型迁移和迁移学习,导入部分模型参数的操作
2021/03/03 Python
美国批发供应商:Kole Imports
2019/04/10 全球购物
聚网科技C++面试笔试题
2015/09/01 面试题
高三自我鉴定范文
2013/10/19 职场文书
给海归自荐信的建议
2013/12/13 职场文书
大学应届生的自我评价
2014/03/06 职场文书
学校节能减排倡议书
2014/05/16 职场文书
销售口号大全
2014/06/11 职场文书
党员教师自我剖析材料
2014/09/29 职场文书
销售内勤岗位职责
2015/02/10 职场文书
《自己去吧》教学反思
2016/02/16 职场文书
六年级作文之预言作文
2019/10/25 职场文书