浅谈移动端之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 相关文章推荐
Mootools 1.2教程 输入过滤第二部分(字符串)
Sep 15 Javascript
window.onresize 多次触发的解决方法
Nov 08 Javascript
javascript动态添加、修改、删除对象的属性与方法详解
Jan 27 Javascript
js 验证身份证信息有效性
Mar 28 Javascript
使用HTML+CSS+JS制作简单的网页菜单界面
Jul 27 Javascript
JS简单验证上传文件类型的方法
Apr 17 Javascript
js登录滑动验证的实现(不滑动无法登陆)
Jan 03 Javascript
Angular5.0 子组件通过service传递值给父组件的方法
Jul 13 Javascript
Vux+Axios拦截器增加loading的问题及实现方法
Nov 08 Javascript
三分钟教你用Node做一个微信哄女友(基友)神器(面向小白)
Jun 21 Javascript
在vue中使用Echarts画曲线图的示例
Oct 03 Javascript
如何vue使用el-table遍历循环表头和表体数据
Apr 26 Vue.js
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写的serv-u的web申请账号的程序
2006/10/09 PHP
域名查询代码公布
2006/10/09 PHP
使用Sphinx对索引进行搜索
2013/06/25 PHP
分享下php5类中三种数据类型的区别
2015/01/26 PHP
PHP使用mysqli操作MySQL数据库的简单方法
2017/02/04 PHP
Laravel框架运行出错提示RuntimeException No application encryption key has been specified.解决方法
2019/04/02 PHP
jQuery取id有.的值的方法
2014/05/21 Javascript
java、javascript实现附件下载示例
2014/08/14 Javascript
使表格的标题列可左右拉伸jquery插件封装
2014/11/24 Javascript
实例分析javascript中的call()和apply()方法
2014/11/28 Javascript
javascript中关于&amp;&amp; 和 || 表达式的小技巧分享
2015/04/10 Javascript
JavaScript+CSS无限极分类效果完整实现方法
2015/12/22 Javascript
理解javascript中的严格模式
2016/02/01 Javascript
JS中dom0级事件和dom2级事件的区别介绍
2016/05/05 Javascript
jquery轮播的实现方式 附完整实例
2016/07/28 Javascript
JS+CSS3模拟溢出滚动效果
2016/08/12 Javascript
JavaScript之cookie技术详解
2016/11/18 Javascript
任意Json转成无序列表的方法示例
2016/12/09 Javascript
一次记住JavaScript的6个正则表达式方法
2018/02/22 Javascript
实例讲解Vue.js中router传参
2018/04/22 Javascript
nodejs中方法和模块用法示例
2018/12/24 NodeJs
微信小程序实现自定义动画弹框/提示框的方法实例
2020/11/06 Javascript
如何在JavaScript中正确处理变量
2020/12/25 Javascript
numpy中loadtxt 的用法详解
2018/08/03 Python
详解opencv Python特征检测及K-最近邻匹配
2019/01/21 Python
Python微医挂号网医生数据抓取
2019/01/24 Python
python判断一个对象是否可迭代的例子
2019/07/22 Python
python getpass实现密文实例详解
2019/09/24 Python
python3:excel操作之读取数据并返回字典 + 写入的案例
2020/09/01 Python
俄罗斯玩具、儿童用品、儿童服装和鞋子网上商店:MyToys.ru
2019/10/14 全球购物
销售副总经理岗位职责
2013/12/11 职场文书
党员“一帮一”活动总结
2015/05/07 职场文书
英语版自我评价,35句话轻松搞定
2019/10/08 职场文书
导游词之上海豫园
2019/10/24 职场文书
关于Spring配置文件加载方式变化引发的异常详解
2022/01/18 Java/Android
docker-compose部署Yapi的方法
2022/04/08 Servers