cvmachine.com - 申博开户网

搜索: 您的位置主页 > 网络频道 > 阅读资讯:怎么样使用HTMl5实现触摸事件判断滑动方向?

怎么样使用HTMl5实现触摸事件判断滑动方向?

2018-06-20 11:37:47 来源:www.cvmachine.com 【

怎么样使用HTMl5实现触摸事件判断滑动方向?

为了给触摸界面提供有力支持, 触摸事件提供了响应用户对触摸屏或者触摸板上操作的能力.

接口

TouchEvent

TouchEvent 是一类描述手指在触摸平面(触摸屏、触摸板等)的状态变化的事件。这类事件用于描述一个或多个触点,使开发者可以检测触点的移动,触点的增加和减少,等等。每 个 Touch 对象代表一个触点; 每个触点都由其位置,大小,形状,压力大小,和目标 element 描述。 TouchList 对象代表多个触点的一个列表.

触摸事件的类型

为了区别触摸相关的状态改变,存在多种类型的触摸事件。可以通过检查触摸事件的 TouchEvent.type 属性来确定当前事件属于哪种类型

  1. touchstart:当用户在触摸平面上放置了一个触点时触发。
  2. touchend:当一个触点被用户从触摸平面上移除(当用户将一个手指离开触摸平面)时触发。
  3. touchmove:当用户在触摸平面上移动触点时触发。
  4. touchcancel:当触点由于某些原因被中断时触发。

判断滑动方向

基本原理就是记录开始滑动(touchStart)和结束滑动(touchEnd)的坐标位置,然后进行相对位置的计算。

touchStart:function(e){
  startX = e.touches[0].pageX;
  startY = e.touches[0].pageY;
  e = e || window.event;
 },
touchEnd:function(e){
  const that = this;
  endX = e.changedTouches[0].pageX;
  endY = e.changedTouches[0].pageY;
  that.upOrDown(startX,startY,endX,endY);
},
upOrDown:function (startX, startY, endX, endY) {
  const that = this;
  let direction = that.GetSlideDirection(startX, startY, endX, endY);
  switch(direction) {
   case 0:
    console.log("没滑动");
    break;
   case 1:
    console.log("向上");
    break;
   case 2:
    console.log("向下");
    break;
   case 3:
    console.log("向左");
    break;
   case 4:
    console.log("向右");
    break;
   default:
    break;
  }
 },
//根据起点和终点返回方向 1:向上,2:向下,3:向左,4:向右,0:未滑动
 GetSlideDirection:function (startX, startY, endX, endY) {
  const that = this;
  let dy = startY - endY;
  let dx = endX - startX;
  let result = 0;
  //如果滑动距离太短
  if(Math.abs(dx) < 2 && Math.abs(dy) < 2) {
   return result;
  }
  let angle = that.GetSlideAngle(dx, dy);
  if(angle >= -45 && angle < 45) {
   result = 4;
  }else if (angle >= 45 && angle < 135) {
   result = 1;
  }else if (angle >= -135 && angle < -45) {
   result = 2;
  }
  else if ((angle >= 135 && angle <= 180) || (angle >= -180 && angle < -135)) {
   result = 3;
  }
  return result;
 },
 //返回角度
 GetSlideAngle:function (dx, dy) {
  return Math.atan2(dy, dx) * 180 / Math.PI;
 }

原生JS方法

除了H5新增的方法外,还可以用原生JS判断view的滑动方向,代码如下(可直接运行):

要注意的是chrome对document.body.scrollTop一直是0,需要改成document.documentElement.scrollTop

<!DOCTYPE html>
<html>
<head>
 <meta charset="utf-8">
 <title> 申博开户(jb51.net)</title>
 <style>
  div {
   border: 1px solid black;
   width: 200px;
   height: 100px;
   overflow: scroll;
  }
 </style>
</head>
<body style="overflow: scroll">
<h1>HEllo word</h1>
<h1>HEllo word</h1>
<h1>HEllo word</h1>
<h1>HEllo word</h1>
<h1>HEllo word</h1>
<h1>HEllo word</h1>
<h1>HEllo word</h1>
<h1>HEllo word</h1>
<h1>HEllo word</h1>
<h1>HEllo word</h1>
<h1>HEllo word</h1>
<h1>HEllo word</h1>
<h1>HEllo word</h1>
<h1>HEllo word</h1>
<h1>HEllo word</h1>
<h1>HEllo word</h1>
<h1>HEllo word</h1>
<h1>HEllo word</h1>
<h1>HEllo word</h1>
<h1>HEllo word</h1>
<h1>HEllo word</h1>
<h1>HEllo word</h1>
<h1>HEllo word</h1>
<h1>HEllo word</h1>
<h1>HEllo word</h1>
<h1>HEllo word</h1>
<h1>HEllo word</h1>
<h1>HEllo word</h1>
<h1>HEllo word</h1>
<h1>HEllo word</h1>
<h1>HEllo word</h1>
<h1>HEllo word</h1>
<h1>HEllo word</h1>
<h1>HEllo word</h1>
<h1>HEllo word</h1>
<h1>HEllo word</h1>
<h1>HEllo word</h1>
<h1>HEllo word</h1>
<h1>HEllo word</h1>
<h1>HEllo word</h1>
<h1>HEllo word</h1>
<h1>HEllo word</h1>
<h1>HEllo word</h1>
<h1>HEllo word</h1>
<h1>HEllo word</h1>
<h1>HEllo word</h1>
<script>
 function scroll( fn ) {
  var beforeScrollTop = document.documentElement.scrollTop,
   fn = fn || function() {};
  console.log('beforeScrollTop',beforeScrollTop);
  window.addEventListener("scroll", function() {
   var afterScrollTop = document.documentElement.scrollTop,
    delta = afterScrollTop - beforeScrollTop;
   console.log('beforeScrollTop',beforeScrollTop);
   console.log('afterScrollTop',afterScrollTop);
   if( delta === 0 ) return false;
   fn( delta > 0 ? "down" : "up" );
   beforeScrollTop = afterScrollTop;
  }, false);
 }

 scroll(function(direction) { console.log(direction) });
</script>

</body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持申博开户。

 

本文地址:http://www.cvmachine.com/a/question/98914.html
Tags: HTML5 触摸 事件
编辑:申博开户网
m88 188bet uedbet 威廉希尔 明升 bwin 明升88 bodog bwin 明升m88.com 18luck 188bet unibet unibet Ladbrokes Ladbrokes 真钱的棋牌游戏 casino m88明升 明升 明升 m88.com 188bet m88 明陞 uedbet赫塔菲官网 365bet官网 nba英文官网 嘉年华官网 皇冠备用 火箭队官网 中国人论坛 bet 单双公式 博彩资讯网 w88优德 港京印刷图库 澳门足球盘 球盘 娱乐场 联众网站 沙龙365 7080棋牌游戏 真钱 澳门回归日期 大众娱乐网 卡宾官方旗舰店 mg电子 全亚洲首选288x nba即时比分 本港 中国足彩竞猜网 斗地主规则 七星彩论坛图规 网上赌博 单双规律 沈泳 华夏娱乐网 明升备用网址 梦网书城 盈禾国际 明升体育 博狗沃鑫 卡宾官方旗舰 信誉赌场 球探比分网 竞彩论坛空间 三亚娱乐 soutec 北京福利彩票 澳门彩票公司 北京pk10 凤凰 纸牌小游戏 皇冠现金代理 银河国际亚洲首选288x 三六八高手论坛 空中城市 赌球心得 188比分 让球规则 三星娱乐城 诺贝尔娱乐城 今天有nba直播吗 5060全讯网 新世纪 久乐娱乐场 世界杯盘口 易胜博 麻将单机版 华人娱乐总站 财神爷心水论坛 巴特 澳门百利宫 明升 红姐统一主图库 九龙老牌图库 打牌 娱乐王子 娱乐真人 亚豪平台 真人娱乐 飞禽走兽老虎机 188bet下载 博发娱乐城 北单 陈怀生 比分188 百万图库 老挝赌博 pc蛋蛋注册 天上人间娱乐 红姐统一图库 产业新闻网 葡京
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部