JavaScript移動端常用事件之touch觸摸事件詳解
前言
移動端瀏覽器兼容性較好,不需要考慮JS的兼容性問題,可以放心的使用原生JS書寫效果,但是移動端也有自己獨特的地方。如觸屏事件touch (也稱觸摸事件) , Android和IOS都有。
1.觸摸事件
觸屏touch事件 | 說明 |
---|---|
touchstart | 手指觸摸到一個DOM元素時觸發(fā) |
touchmove | 手指在一個DOM元素上滑動時觸發(fā) |
touchend | 手指從一個DOM元素上移開時觸發(fā) |
<body> <div></div> <script> var div = document.querySelector('div'); // 手指觸摸DOM事件 div.addEventListener('touchstart', function () { console.log('別摸我!'); }) // 手指觸摸滑動DOM事件 div.addEventListener('touchmove', function () { console.log('我繼續(xù)摸'); }) // 手指觸摸離開DOM事件 div.addEventListener('touchend', function () { console.log('我摸夠了'); }) </script>
2.觸屏事件
TouchEvent是一類描述手指在觸摸平面 (觸摸屏、觸摸板等)的狀態(tài)變化的事件。這類事件用于描述一個或多個觸點,使開發(fā)者可以檢測觸點的移動,觸點的加和減少,等等 touchstart、touchmove、 touchend 三個事件都會各自有事件對象。
觸摸列表 | 說明 |
---|---|
touches | 正在觸摸屏幕的所有手指的一個列表 |
targetTouches | 正在觸摸當(dāng)前DOM元素上的手指的一一個列表 |
changedTouches | 手指狀態(tài)發(fā)生了改變的列表,從無到有,從有到無變化 |
因為平時我們都是給元素注冊觸摸事件,所以常用targetTocuhes
3.TouchEvent觸摸事件對象
touches 正在觸摸屏幕的所有于指的列衣,targetTouches 正在觸摸當(dāng)前DOM元素的手指列表如果偵聽的是一個DOM元素,他們兩個是一樣的,changedTouches 手指狀態(tài)發(fā)生了改變的列表從無到有或者從有到無
4.拖動元素
1.touchstart,touchmove,touchend 可以實現(xiàn)拖動元素
2.但是拖動元素需要當(dāng)前手指的坐標(biāo)值我們可以使用targetTouches[0] 里面的pageX和pageY
3.拖動的原理:手指移動計算出手指移動的距離,然后用盒子原來的位置+手指移動的距離
4.手指移動的距離 = 手指滑動中的位置 - 手指剛開始觸摸的位置
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <style> body { margin: 0; padding: 0; } div { position: absolute; left: 0; width: 100px; height: 100px; background-color: plum; } </style> </head> <body> <div></div> <script> var div = document.querySelector('div'); // 獲取手指初始坐標(biāo)和盒子的原來位置 var startX = 0; var startY = 0; // 獲取盒子原來的位置 var x = 0; var y = 0; div.addEventListener('touchstart', function (e) { // 得到初始的手指坐標(biāo) startX = e.targetTouches[0].pageX; startY = e.targetTouches[0].pageY; // 獲取盒子坐標(biāo) x = this.offsetLeft; y = this.offsetTop; }) div.addEventListener('touchmove', function (e) { // 手指的移動距離= 手指移動之后的坐標(biāo) - 手指初始的坐標(biāo) var moveX = e.targetTouches[0].pageX - startX; var moveY = e.targetTouches[0].pageY - startY; // 移動盒子,盒子原來的位置+手指移動的距離 this.style.left = x + moveX + 'px'; this.style.top = y + moveY + 'px'; // 阻止屏幕滾動行為 e.preventDefault(); }) </script> </body> </html>
總結(jié)
到此這篇關(guān)于JavaScript移動端常用事件之touch觸摸事件詳解的文章就介紹到這了,更多相關(guān)js移動端touch觸摸事件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
TypeScript判斷兩個數(shù)組的內(nèi)容是否相等的實現(xiàn)
本文主要介紹了TypeScript?判斷兩個數(shù)組的內(nèi)容是否相等,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-11-11Bootstrap基本組件學(xué)習(xí)筆記之縮略圖(13)
這篇文章主要為大家詳細(xì)介紹了Bootstrap基本組件學(xué)習(xí)筆記之縮略圖,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-12-12JS實現(xiàn)頁面長時間不操作退出到登錄頁面的示例代碼
這篇文章主要介紹了JS實現(xiàn)頁面長時間不操作退出到登錄頁面的示例代碼,通過在head標(biāo)簽中引入jquey和頁面長時間不操作的js頁面,結(jié)合實例代碼講解的非常詳細(xì),需要的朋友可以參考下2024-03-03