浅谈移动端之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 相关文章推荐
ASP SQL防注入的方法
Dec 25 Javascript
jquery时间下拉框小例子
Apr 15 Javascript
jQuery中[attribute=value]选择器用法实例
Dec 31 Javascript
jQuery+easyui中的combobox实现下拉框特效
Feb 27 Javascript
jQuery实现类似淘宝网图片放大效果的方法
Jul 08 Javascript
JavaScript的History API使搜索引擎抓取AJAX内容
Dec 07 Javascript
JS实现星星评分功能实例代码(两种方法)
Jun 09 Javascript
微信小程序 弹窗自定义实例代码
Mar 08 Javascript
Angular2 http jsonp的实例详解
Aug 31 Javascript
用React-Native+Mobx做一个迷你水果商城APP(附源码)
Dec 25 Javascript
vue 根据数组中某一项的值进行排序的方法
Aug 30 Javascript
浅析Proxy可以优化vue的数据监听机制问题及实现思路
Nov 29 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
PHP4之COOKIE支持详解
2006/10/09 PHP
PHP脚本中include文件出错解决方法
2008/11/20 PHP
PHP 字符串 小常识
2009/06/05 PHP
php绘制圆形的方法
2015/01/24 PHP
CentOS下PHP7的编译安装及MySQL的支持和一些常见问题的解决办法
2015/12/17 PHP
基于PHP实现通过照片获取ip地址
2016/04/26 PHP
yii2高级应用之自定义组件实现全局使用图片上传功能的方法
2016/10/08 PHP
php面向对象程序设计中self与static的区别分析
2019/05/21 PHP
基于JQuery实现鼠标点击文本框显示隐藏提示文本
2012/02/23 Javascript
浅析jQuery操作select控件的取值和设值
2016/12/07 Javascript
原生ajax处理json格式数据的实例代码
2016/12/25 Javascript
jquery ajaxfileupload异步上传插件使用详解
2017/02/08 Javascript
jQuery插件zTree实现获取当前选中节点在同级节点中序号的方法
2017/03/08 Javascript
vue的安装及element组件的安装方法
2018/03/09 Javascript
JS字符串常用操作方法实例小结
2019/06/24 Javascript
layui 富文本图片上传接口与普通按钮 文件上传接口的例子
2019/09/23 Javascript
[04:03]2014DOTA2西雅图国际邀请赛 LGD战队巡礼
2014/07/07 DOTA
python之wxPython应用实例
2014/09/28 Python
python实现批量改文件名称的方法
2015/05/25 Python
Python做文本按行去重的实现方法
2016/10/19 Python
Python实现将罗马数字转换成普通阿拉伯数字的方法
2017/04/19 Python
Python3一行代码实现图片文字识别的示例
2018/01/15 Python
Python多线程threading和multiprocessing模块实例解析
2018/01/29 Python
Python 循环语句之 while,for语句详解
2018/04/23 Python
python实现简单多人聊天室
2018/12/11 Python
浅谈Python中的全局锁(GIL)问题
2019/01/11 Python
Python 字符串池化的前提
2020/07/03 Python
CSS3实例分享--超炫checkbox复选框和radio单选框
2014/09/01 HTML / CSS
详解HTML5 window.postMessage与跨域
2017/05/11 HTML / CSS
新加坡航空官方网站:Singapore Airlines
2016/10/13 全球购物
Sasa莎莎海外旗舰店:香港莎莎美妆平台
2018/03/21 全球购物
GWT的应用有哪两种部署模式
2012/12/21 面试题
读书之星事迹材料
2014/05/12 职场文书
工程售后服务方案
2014/06/08 职场文书
小学家长通知书评语
2014/12/31 职场文书
彩虹社八名人气艺人全新周边限时推出,性转女装男装一次拥有!
2022/04/01 日漫