浅谈移动端之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 相关文章推荐
ie 7/8不支持trim的属性的解决方案
May 23 Javascript
javascript的事件触发器介绍的实现
Jun 05 Javascript
jQuery 浮动导航菜单适合购物商品类型的网站
Sep 09 Javascript
原生js实现日期联动
Jan 12 Javascript
简介JavaScript中fixed()方法的使用
Jun 08 Javascript
JQ中$(window).load和$(document).ready区别与执行顺序
Mar 01 Javascript
addEventListener()与removeEventListener()解析
Apr 20 Javascript
微信小程序canvas写字板效果及实例
Jun 15 Javascript
JavaScript的六种继承方式(推荐)
Jun 26 Javascript
vue 使用vue-i18n做全局中英文切换的方法
Oct 29 Javascript
详解如何探测小程序返回到webview页面
May 14 Javascript
Vue实现搜索结果高亮显示关键字
May 28 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 smarty模版引擎中的缓存应用
2009/12/11 PHP
用PHP ob_start()控制浏览器cache、生成html实现代码
2010/02/16 PHP
ExtJs Excel导出并下载IIS服务器端遇到的问题
2011/09/16 Javascript
使用js+jquery实现无限极联动
2013/05/23 Javascript
JavaScript编程的10个实用小技巧
2014/04/18 Javascript
AngularJS入门教程(一):静态模板
2014/12/06 Javascript
每天一篇javascript学习小结(Array数组)
2015/11/11 Javascript
jquery操作checkbox火狐下第二次无法勾选的解决方法
2016/10/10 Javascript
全面解析vue中的数据双向绑定
2017/05/10 Javascript
webpack 1.x升级过程中的踩坑总结大全
2017/08/09 Javascript
基于Node.js模板引擎教程-jade速学与实战1
2017/09/17 Javascript
AngularJS对动态增加的DOM实现ng-keyup事件示例
2018/03/12 Javascript
微信小程序按顺序同步执行的两种方式
2019/12/20 Javascript
详解jQuery中的prop()使用方法
2020/01/05 jQuery
Vue触发input选取文件点击事件操作
2020/08/07 Javascript
Vue 样式切换及三元判断样式关联操作
2020/08/09 Javascript
Python Mysql自动备份脚本
2008/07/14 Python
python通过scapy获取局域网所有主机mac地址示例
2014/05/04 Python
Python 200行代码实现一个滑动验证码过程详解
2019/07/11 Python
Django发送邮件功能实例详解
2019/09/02 Python
Python制作词云图代码实例
2019/09/09 Python
python关闭占用端口方式
2019/12/17 Python
next在python中返回迭代器的实例方法
2020/12/15 Python
奇怪的鱼:Weird Fish
2018/03/18 全球购物
美国单身专业人士在线约会网站:EliteSingles
2019/03/19 全球购物
美国最佳在线航班预订网站:LookupFare
2019/03/26 全球购物
PHP如何防止SQL注入
2014/05/03 面试题
实习生自荐信范文分享
2013/11/27 职场文书
完美主义个人的自我评价
2014/02/17 职场文书
《卖木雕的少年》教学反思
2014/04/11 职场文书
小组口号大全
2014/06/09 职场文书
小班上学期个人总结
2015/02/12 职场文书
社区工作者个人总结
2015/02/28 职场文书
学生党支部工作总结2015
2015/05/26 职场文书
小数乘法教学反思
2016/02/22 职场文书
Kubernetes关键组件与结构组成介绍
2022/03/31 Servers