色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術文章
文章詳情頁

如何利用原生JS實現觸摸滑動監聽事件

瀏覽:96日期:2024-03-22 16:59:33
前言

今天寫一個小Demo,有個地方涉及到了左滑右滑的邏輯,本來想著用插件來著,但是想到自己好久沒用原生JS寫滑動的監聽了,所以試著用原生JS來實現了一下,畢竟溫故而知新嘛,同時做個記錄。先把實現的效果貼出來:

如何利用原生JS實現觸摸滑動監聽事件

構思

想要寫出絲滑的觸摸滑動事件的監聽,要考慮以下3個方面的邏輯:

距離: 滑動距離要大于40 時間: 滑動時間小于在0.5秒,即500毫秒內完成手指按下,拖動,離開(避免只是手指在屏幕就觸發) 滑動方向: 左右滑動的條件是:X軸移動的距離大于Y軸移動的距離,為正則向左,為負則向右上下滑動的條件是Y軸移動的距離大于X軸移動的距離,為正則向上,為負則向下

有了基礎的構思,我們就可以根據這個思路來完成代碼了~

監聽的事件

說到監聽觸摸滑動,要用到的自然就是下面這三個觸摸事件了:

1. touchstart 觸摸開始,手指點擊屏幕時觸發(可監聽多點觸控,后面的手指也同樣會觸發)

2. touchmove 接觸點改變,滑動時持續觸發

3. touchend 觸摸結束,手指離開屏幕時觸發

這三個觸摸事件每個都包括了三個觸摸對象列表(可根據觸摸點實現多點觸控):

1. touches:當前屏幕上的所有手指觸摸點的列表

2. targetTouches:當前DOM元素上手指的列表

3. changedTouches:當前事件手指的列表

同時每個觸摸對象Touch包含的屬性如下:

- identifier:標識觸摸的唯一ID

- pageX:觸摸點在頁面中的x坐標

- pageY:觸摸點在頁面中的y坐標

- screenX:觸摸點在屏幕中的x坐標

- screenY:觸摸點在屏幕中的y坐標

- clientX:觸摸點在視口中的x坐標

- clientY:觸摸點在視口中的y坐標

- target:觸摸的DOM節點

代碼實現

有了上面的構思和觸摸事件的基礎,我們很容易就能把代碼敲出來啦~

let box = document.querySelector(’body’) // 監聽對象let startTime = ’’ // 觸摸開始時間let startDistanceX = ’’ // 觸摸開始X軸位置let startDistanceY = ’’ // 觸摸開始Y軸位置let endTime = ’’ // 觸摸結束時間let endDistanceX = ’’ // 觸摸結束X軸位置let endDistanceY = ’’ // 觸摸結束Y軸位置let moveTime = ’’ // 觸摸時間let moveDistanceX = ’’ // 觸摸移動X軸距離let moveDistanceY = ’’ // 觸摸移動Y軸距離box.addEventListener('touchstart', (e) => { startTime = new Date().getTime() startDistanceX = e.touches[0].screenX startDistanceY = e.touches[0].screenY})box.addEventListener('touchend', (e) => { endTime = new Date().getTime() endDistanceX = e.changedTouches[0].screenX endDistanceY = e.changedTouches[0].screenY moveTime = endTime - startTime moveDistanceX = startDistanceX - endDistanceX moveDistanceY = startDistanceY - endDistanceY console.log(moveDistanceX, moveDistanceY) // 判斷滑動距離超過40 且 時間小于500毫秒 if ((Math.abs(moveDistanceX) > 40 || Math.abs(moveDistanceY) > 40) && moveTime < 500) {// 判斷X軸移動的距離是否大于Y軸移動的距離if (Math.abs(moveDistanceX) > Math.abs(moveDistanceY)) {// 左右console.log(moveDistanceX > 0 ? ’左’ : ’右’)} else {// 上下console.log(moveDistanceY > 0 ? ’上’ : ’下’)} }})

運行一下看看吧:

如何利用原生JS實現觸摸滑動監聽事件

可以看出,觸摸時間大于500ms不會觸發,滑動距離小于40也不會觸發,如果是有角度的滑動,則會以XY軸移動距離最遠的為準。完美實現!

后記

前端框架發展日益迅猛,很多人直接上手學習框架也毫無壓力,對原生JS的學習就不那么重視了。但萬變不離其宗,框架的優勢在于它的設計思想和模式,想要深刻的理解還是要有原生JS做基礎,想要走得遠,還是要把基礎夯實,畢竟萬丈高樓平地起不是?

到此這篇關于如何利用原生JS實現觸摸滑動監聽事件的文章就介紹到這了,更多相關JS觸摸滑動監聽事件內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 日韩 国产 欧美 精品 在线 | 国产上床视频 | 国产高清毛片 | 日本三级精品 | 久草视频官网 | 大陆孕妇孕交视频自拍 | 久久久影院亚洲精品 | 国产美女做爰免费视频软件 | 亚洲久久成人 | 国产亚洲三级 | 国产亚洲一区二区在线观看 | 欧美激情特级黄aa毛片 | 97天天干| 三级中文字幕 | 自怕偷自怕亚洲精品 | 久久福利影视 | www片| 三级网站国产 | 久久久久88色偷偷免费 | 在线私拍国产福利精品 | 伊人国产在线视频 | 日韩福利视频精品专区 | a毛片a毛片a视频 | 欧美日韩国产亚洲一区二区 | 全部免费的毛片在线看美国 | 亚洲精品国产精品国自产网站 | 亚洲欧美日韩精品久久亚洲区 | 成年女人看片免费视频播放器 | 九九热视频在线播放 | 欧美另类视频一区二区三区 | 日本加勒比视频在线观看 | 亚洲成人偷拍自拍 | 国产精品国产三级国产a | 国产剧情一区二区 | 久久国产免费观看精品3 | 亚洲精品亚洲人成在线麻豆 | 午夜精品尤物福利视频在线 | 国产在线91精品 | 欧美大片毛片大片 | 岛国在线免费观看 | 毛片日韩 |