JavaScript移動端常用事件之touch觸摸事件詳解
前言
移動端瀏覽器兼容性較好,不需要考慮JS的兼容性問題,可以放心的使用原生JS書寫效果,但是移動端也有自己獨(dú)特的地方。如觸屏事件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)變化的事件。這類事件用于描述一個或多個觸點(diǎn),使開發(fā)者可以檢測觸點(diǎn)的移動,觸點(diǎn)的加和減少,等等 touchstart、touchmove、 touchend 三個事件都會各自有事件對象。
| 觸摸列表 | 說明 |
|---|---|
| touches | 正在觸摸屏幕的所有手指的一個列表 |
| targetTouches | 正在觸摸當(dāng)前DOM元素上的手指的一一個列表 |
| changedTouches | 手指狀態(tài)發(fā)生了改變的列表,從無到有,從有到無變化 |

因?yàn)槠綍r我們都是給元素注冊觸摸事件,所以常用targetTocuhes
3.TouchEvent觸摸事件對象

touches 正在觸摸屏幕的所有于指的列衣,targetTouches 正在觸摸當(dāng)前DOM元素的手指列表如果偵聽的是一個DOM元素,他們兩個是一樣的,changedTouches 手指狀態(tài)發(fā)生了改變的列表從無到有或者從有到無
4.拖動元素
1.touchstart,touchmove,touchend 可以實(shí)現(xiàn)拖動元素
2.但是拖動元素需要當(dāng)前手指的坐標(biāo)值我們可以使用targetTouches[0] 里面的pageX和pageY
3.拖動的原理:手指移動計(jì)算出手指移動的距離,然后用盒子原來的位置+手指移動的距離
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)容是否相等的實(shí)現(xiàn)
本文主要介紹了TypeScript?判斷兩個數(shù)組的內(nèi)容是否相等,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-11-11
原生javascript實(shí)現(xiàn)圖片按鈕切換
這篇文章主要介紹了原生javascript實(shí)現(xiàn)圖片按鈕切換,需要的朋友可以參考下2015-01-01
Bootstrap基本組件學(xué)習(xí)筆記之縮略圖(13)
這篇文章主要為大家詳細(xì)介紹了Bootstrap基本組件學(xué)習(xí)筆記之縮略圖,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12
JS實(shí)現(xiàn)頁面長時間不操作退出到登錄頁面的示例代碼
這篇文章主要介紹了JS實(shí)現(xiàn)頁面長時間不操作退出到登錄頁面的示例代碼,通過在head標(biāo)簽中引入jquey和頁面長時間不操作的js頁面,結(jié)合實(shí)例代碼講解的非常詳細(xì),需要的朋友可以參考下2024-03-03

