浅谈移动端之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 相关文章推荐
模仿JQuery.extend函数扩展自己对象的js代码
Dec 09 Javascript
Jquery cookie操作代码
Mar 14 Javascript
js实现同一页面多个不同运动效果的方法
Apr 10 Javascript
使用struts2+Ajax+jquery验证用户名是否已被注册
Mar 22 Javascript
Extjs 点击复选框在表格中增加相关信息行
Jul 12 Javascript
浅谈Web页面向后台提交数据的方式和选择
Sep 23 Javascript
angular.js之路由的选择方法
Sep 24 Javascript
JS中split()用法(将字符串按指定符号分割成数组)
Oct 24 Javascript
JS中如何实现点击a标签返回页面顶部的问题
Jan 19 Javascript
jQuery实现简单复制json对象和json对象集合操作示例
Jul 09 jQuery
ligerUI的ligerDialog关闭刷新的方法
Sep 27 Javascript
js实现弹框效果
Mar 24 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中实现简单的ACL 完结篇
2011/09/07 PHP
浅析linux下apache服务器的配置和管理
2013/08/10 PHP
php计算整个mysql数据库大小的方法
2015/06/19 PHP
PHP中读取文件的几个方法总结(推荐)
2016/06/03 PHP
php 读取文件夹下所有图片、文件的实例
2018/10/17 PHP
PHP封装的简单连接MongoDB类示例
2019/02/13 PHP
[原创]后缀就扩展名为js的文件是什么文件
2007/12/06 Javascript
使用jQuery UI的tooltip函数修饰title属性的气泡悬浮框
2013/06/24 Javascript
让新消息在网页标题闪烁提示的jQuery代码
2013/11/04 Javascript
jQuery实现鼠标经过事件的延时处理效果
2020/08/20 Javascript
Js的Array数组对象详解
2016/02/22 Javascript
第一次记录Bootstrap table学习笔记(1)
2017/05/18 Javascript
JavaScript操作文件_动力节点Java学院整理
2017/06/30 Javascript
node使用UEditor富文本编辑器的方法实例
2017/07/11 Javascript
详解基于vue的移动web app页面缓存解决方案
2017/08/03 Javascript
AngularJs用户输入动态模板XSS攻击示例详解
2018/04/21 Javascript
js实现图片局部放大效果详解
2019/03/18 Javascript
解决React在安装antd之后出现的Can't resolve './locale'问题(推荐)
2020/05/03 Javascript
js实现验证码功能
2020/07/24 Javascript
python调用cmd命令行制作刷博器
2014/01/13 Python
Python实现大文件排序的方法
2015/07/10 Python
在Django的视图(View)外使用Session的方法
2015/07/23 Python
python与sqlite3实现解密chrome cookie实例代码
2018/01/20 Python
Python3爬虫爬取百姓网列表并保存为json功能示例【基于request、lxml和json模块】
2018/12/05 Python
详解Python爬取并下载《电影天堂》3千多部电影
2019/04/26 Python
学习和使用python的13个理由
2019/07/30 Python
Python Web框架之Django框架Form组件用法详解
2019/08/16 Python
使用OpenCV实现仿射变换—平移功能
2019/08/29 Python
Python监控服务器实用工具psutil使用解析
2019/12/19 Python
在pycharm中创建django项目的示例代码
2020/05/28 Python
Java提供了哪些企业应用编程接口
2015/02/13 面试题
解释一下ruby中的特殊方法与特殊类
2013/02/26 面试题
艺术学院毕业生自我评价
2014/03/02 职场文书
大学生2014全国两会学习心得体会
2014/03/10 职场文书
2014大四本科生自我鉴定总结
2014/10/04 职场文书
违纪开除通知书
2015/04/25 职场文书