摘要:可以通過(guò)檢查觸摸事件的屬性來(lái)確定當(dāng)前事件屬于哪種類型當(dāng)用戶在觸摸平面上放置了一個(gè)觸點(diǎn)時(shí)觸發(fā)。判斷滑動(dòng)方向基本原理就是記錄開始滑動(dòng)和結(jié)束滑動(dòng)的坐標(biāo)位置,然后進(jìn)行相對(duì)位置的計(jì)算。
為了給觸摸界面提供有力支持, 觸摸事件提供了響應(yīng)用戶對(duì)觸摸屏或者觸摸板上操作的能力.
接口 TouchEventTouchEvent 是一類描述手指在觸摸平面(觸摸屏、觸摸板等)的狀態(tài)變化的事件。這類事件用于描述一個(gè)或多個(gè)觸點(diǎn),使開發(fā)者可以檢測(cè)觸點(diǎn)的移動(dòng),觸點(diǎn)的增加和減少,等等。每 個(gè) Touch 對(duì)象代表一個(gè)觸點(diǎn); 每個(gè)觸點(diǎn)都由其位置,大小,形狀,壓力大小,和目標(biāo) element 描述。 TouchList 對(duì)象代表多個(gè)觸點(diǎn)的一個(gè)列表.
觸摸事件的類型為了區(qū)別觸摸相關(guān)的狀態(tài)改變,存在多種類型的觸摸事件??梢酝ㄟ^(guò)檢查觸摸事件的 TouchEvent.type 屬性來(lái)確定當(dāng)前事件屬于哪種類型
touchstart:當(dāng)用戶在觸摸平面上放置了一個(gè)觸點(diǎn)時(shí)觸發(fā)。
touchend:當(dāng)一個(gè)觸點(diǎn)被用戶從觸摸平面上移除(當(dāng)用戶將一個(gè)手指離開觸摸平面)時(shí)觸發(fā)。
touchmove:當(dāng)用戶在觸摸平面上移動(dòng)觸點(diǎn)時(shí)觸發(fā)。
touchcancel:當(dāng)觸點(diǎn)由于某些原因被中斷時(shí)觸發(fā)。
判斷滑動(dòng)方向基本原理就是記錄開始滑動(dòng)(touchStart)和結(jié)束滑動(dòng)(touchEnd)的坐標(biāo)位置,然后進(jìn)行相對(duì)位置的計(jì)算。
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("沒滑動(dòng)"); break; case 1: console.log("向上"); break; case 2: console.log("向下"); break; case 3: console.log("向左"); break; case 4: console.log("向右"); break; default: break; } }, //根據(jù)起點(diǎn)和終點(diǎn)返回方向 1:向上,2:向下,3:向左,4:向右,0:未滑動(dòng) GetSlideDirection:function (startX, startY, endX, endY) { const that = this; let dy = startY - endY; let dx = endX - startX; let result = 0; //如果滑動(dòng)距離太短 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的滑動(dòng)方向,代碼如下(可直接運(yùn)行):
要注意的是chrome對(duì)document.body.scrollTop一直是0,需要改成document.documentElement.scrollTop
菜鳥教程(runoob.com) HEllo word
HEllo word
HEllo word
HEllo word
HEllo word
HEllo word
HEllo word
HEllo word
HEllo word
HEllo word
HEllo word
HEllo word
HEllo word
HEllo word
HEllo word
HEllo word
HEllo word
HEllo word
HEllo word
HEllo word
HEllo word
HEllo word
HEllo word
HEllo word
HEllo word
HEllo word
HEllo word
HEllo word
HEllo word
HEllo word
HEllo word
HEllo word
HEllo word
HEllo word
HEllo word
HEllo word
HEllo word
HEllo word
HEllo word
HEllo word
HEllo word
HEllo word
HEllo word
HEllo word
HEllo word
HEllo word
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/107941.html
摘要:從本人這兩個(gè)月移動(dòng)實(shí)踐的經(jīng)驗(yàn)來(lái)看,微信的里面和的滑動(dòng)效果無(wú)論是在安卓還是下的體驗(yàn)都很一般,有明顯的卡頓現(xiàn)象,在安卓下面還會(huì)出現(xiàn)滑動(dòng)過(guò)快的時(shí)候在頁(yè)面停下來(lái)之后滾動(dòng)條才閃到相應(yīng)位置的現(xiàn)象。 前言 在微信里面瀏覽頁(yè)面的時(shí)候,有一個(gè)很管用的方法可以區(qū)分這個(gè)頁(yè)面是原生的還是H5形式的。隨便打開一個(gè)頁(yè)面,用力往下扯的時(shí)候,如果頁(yè)面上方出現(xiàn)了黑底,黑底上有一行諸如網(wǎng)頁(yè)由game.weixin.qq....
摘要:前言本次給大家分享的是常見的移動(dòng)端單點(diǎn)觸摸事件的設(shè)計(jì)思路及實(shí)踐。實(shí)現(xiàn)即手指滑動(dòng)事件,應(yīng)用場(chǎng)景如輪播圖左右滑動(dòng)切換,整屏頁(yè)面滑動(dòng)翻頁(yè)等,算是移動(dòng)端最常見的手勢(shì)之一了。 前言 本次給大家分享的是常見的移動(dòng)端單點(diǎn)觸摸事件的設(shè)計(jì)思路及實(shí)踐。 核心技術(shù) 主要就是利用移動(dòng)端的以下3個(gè)觸摸事件,來(lái)模擬和實(shí)現(xiàn)自定義的手勢(shì)操作 touchstart:手指觸摸到屏幕的一瞬間觸發(fā) touchmove:手指...
閱讀 3642·2021-10-08 10:04
閱讀 965·2019-08-30 15:54
閱讀 2248·2019-08-29 16:09
閱讀 1408·2019-08-29 15:41
閱讀 2341·2019-08-29 11:01
閱讀 1792·2019-08-26 13:51
閱讀 1104·2019-08-26 13:25
閱讀 1908·2019-08-26 13:24