/**
* param 原生js方式实现判断用户的滑动方向
* 返回1 向上
* 返回2 向下
* 返回3 向左
* 返回4 向右
*/
class juedgeSlide {
constructor() {
this.startx = '';
this.starty = '';
}
//获得角度
getAngle(angx, angy) {
return Math.atan2(angy, angx) * 180 / Math.PI;
};
//根据起点终点返回方向 1向上 2向下 3向左 4向右 0未滑动
getDirection(startx, starty, endx, endy) {
var angx = endx - startx;
var angy = endy - starty;
var result = 0;
//如果滑动距离太短
if (Math.abs(angx) < 2 && Math.abs(angy) < 2) {
return result;
}
var angle = this.getAngle(angx, angy);
if (angle >= -135 && angle <= -45) {
result = 1;
} else if (angle > 45 && angle < 135) {
result = 2;
} else if ((angle >= 135 && angle <= 180) || (angle >= -180 && angle < -135)) {
result = 3;
} else if (angle >= -45 && angle <= 45) {
result = 4;
}
return result;
}
// 初始化函数
init(callback) {
var that = this;
//手指接触屏幕
document.addEventListener("touchstart", function (e) {
that.startx = e.touches[0].pageX;
that.starty = e.touches[0].pageY;
}, false);
document.addEventListener("touchmove", function (e) {
var endx, endy;
endx = e.changedTouches[0].pageX;
endy = e.changedTouches[0].pageY;
var direction = that.getDirection(that.startx, that.starty, endx, endy);
callback(direction, true);
}, false);
//手指离开屏幕
document.addEventListener("touchend", function (e) {
var endx, endy;
endx = e.changedTouches[0].pageX;
endy = e.changedTouches[0].pageY;
var direction = that.getDirection(that.startx, that.starty, endx, endy);
callback(direction, false);
}, false);
}

}

说明:引入改类后,调用init方法,然后在回调函数里面判断返回的数字,

 * 返回1 向上
* 返回2 向下
* 返回3 向左
* 返回4 向右

进而来判断用户滑动的方向!

同时,如果第二个参数返回的是true,代表的是向某个滑动方向滑动进行时,即touchmove!

ES6类封装判断用户上下左右滑动事件!的更多相关文章

  1. Android判断Touch为滑动事件还是操作控件

    Android判断Touch为滑动事件还是操作控件 因为在项目中要判断WebView是否处于滚动状态,但它不像ListView有onScrollStateChanged方法来监听,要实现就得手动监听它 ...

  2. 用es6类封装的图片预加载技术!

    1.HTML <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  3. Android开发ScrollView上下左右滑动事件冲突整理一(根据事件)

    主要通过重写 onInterceptTouchEvent 事件来解决,代码如下: package com.cm.android.pad.view.itemView; import android.co ...

  4. js,JavaScript 监听 判断 移动端 滑动事件

    <script> var startx, starty; //获得角度 function getAngle(angx, angy) { return Math.atan2(angy, an ...

  5. JavaScript之屏幕上下左右滑动监听

    前言 存在这么一个需求,根据用户在屏幕不同的滑动方向(上.下.左.右),使用js脚本判断出不同的滑动行为,更新网页为不同的界面. 源码 参考了博文[1]的源码,但由于存在一些漏洞,比如:上下滑动事件监 ...

  6. 微信小程序swiper禁止用户手动滑动

    最近做一个项目,由于用到了竖向swiper,导致占用屏幕过大,用户滑动总是滑动到swiper组件,页面无法向下拉动,于是找各种办法禁止用户手动滑动swiper组件. 经过网上一番查找,网友们也是闹洞大 ...

  7. 封装的通过微信JS-SDK实现自定义分享到朋友圈或者朋友的ES6类!

    引言: 我们经常在做微信H5的过程中需要自定义分享网页,这个如何实现呢?请看如下的封装的ES6类及使用说明! /** * @jssdk js对象,包括appId,timestamp,nonceStr, ...

  8. 2016-02-20WebForm登陆验证,判断用户是否登陆 PageBase类

    http://blog.csdn.net/fanbin168/article/details/49404233 很多时候,WebFrom页面,我们需要判断用户是否已经登陆了.假如有很多页面,难道我们要 ...

  9. 【javascript】jQuery判断用户右击事件

    jquery 判断用户是鼠标是右击还是左击, // 1 = 鼠标左键 left; 2 = 鼠标中键; 3 = 鼠标右键 $(document).mousedown(function(e) { if(3 ...

随机推荐

  1. python之编码与解码

    编码 字符串被当作url提交时会被自动进行url编码处理,在python里也有个urllib.urlencode的方法,可以很方便的把字典形式的参数进行url编码.当url地址含有中文或者“/”的时候 ...

  2. [PHP] 频率限制类

    比如要实现 单个ip限制60秒1次单个关键字,比如手机号,限制60秒1次,3600秒10次 <?php class Sina_Mail_WebAntispam { const PREFIX_WH ...

  3. Maven(十一)导入手动创建的Maven 工程

    传统的导入方式并不能导入手动创建的Maven工程 因为eclipse项目必须有如图所示文件,才被认为是Eclipse工程 使用Maven方式导入 导入选项中并没有把项目复制到工作空间的选项,这是与传统 ...

  4. 经典面试题:浏览器是怎样解析CSS的?

    摘要: 理解浏览器原理. 解析 一旦 CSS 被浏览器下载,CSS 解析器就会被打开来处理它遇到的任何 CSS.这可以是单个文档内的 CSS.<style>标记内的 CSS,也可以是 DO ...

  5. 流程控制值while 循环

    一.结束循环的两种方式 1. 修改条件tag=Truewhile tag: print(1) print(2) print(3) tag=False print(4) 2.while + break ...

  6. 外媒评李开复的《AI·未来》:四大浪潮正在席卷全球

    外媒评李开复的<AI·未来>:四大浪潮正在席卷全球 https://mp.weixin.qq.com/s/oElub0QOYjOROhqN3ULUkg [网易智能讯 9月17日消息]李开复 ...

  7. 新版的nuget包 PackageLicense 这样写

    Intro 最近编译类库项目的时候发现总是有个 licenseUrl 的警告,警告信息如下: warning NU5125: The 'licenseUrl' element will be depr ...

  8. C# 批量插入数据方法

    批量插入数据方法 void InsertTwo(List<CourseArrangeInfo> dtF) { Stopwatch watch = new Stopwatch(); watc ...

  9. AngularJS学习之旅—AngularJS 过滤器(七)

    1.AngularJS 过滤器 过滤器可以使用一个管道字符(|)添加到表达式和指令中. AngularJS 过滤器可用于转换数据: 过滤器 描述 currency 格式化数字为货币格式. filter ...

  10. Flex Builder 4.6切换语言

    一.修改Flex builder 1.用无格式编辑器打开FlashBuilder.ini 2.把zh_CN替换成"en_US" 二.修改MyEclipse插件 1.用无格式编辑器打 ...