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 | 正在觸摸當前DOM元素上的手指的一一個列表 |
| changedTouches | 手指狀態(tài)發(fā)生了改變的列表,從無到有,從有到無變化 |

因為平時我們都是給元素注冊觸摸事件,所以常用targetTocuhes
3.TouchEvent觸摸事件對象

touches 正在觸摸屏幕的所有于指的列衣,targetTouches 正在觸摸當前DOM元素的手指列表如果偵聽的是一個DOM元素,他們兩個是一樣的,changedTouches 手指狀態(tài)發(fā)生了改變的列表從無到有或者從有到無
4.拖動元素
1.touchstart,touchmove,touchend 可以實現(xiàn)拖動元素
2.但是拖動元素需要當前手指的坐標值我們可以使用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');
// 獲取手指初始坐標和盒子的原來位置
var startX = 0;
var startY = 0;
// 獲取盒子原來的位置
var x = 0;
var y = 0;
div.addEventListener('touchstart', function (e) {
// 得到初始的手指坐標
startX = e.targetTouches[0].pageX;
startY = e.targetTouches[0].pageY;
// 獲取盒子坐標
x = this.offsetLeft;
y = this.offsetTop;
})
div.addEventListener('touchmove', function (e) {
// 手指的移動距離= 手指移動之后的坐標 - 手指初始的坐標
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)文章
Js類的靜態(tài)方法與實例方法區(qū)分及jQuery拓展的兩種方法
這篇文章主要介紹了Js類的靜態(tài)方法與實例方法區(qū)分及jQuery拓展的兩種方法 的相關(guān)資料,對靜態(tài)方法(Static)和實例方法(非Static)不太理解的朋友可以一起學(xué)習(xí)下2016-06-06
django admin 使用SimpleUI自定義按鈕彈窗框示例
Django 后臺admin有大量的屬性和方法,擁有強大的功能和自定義能力,這篇文章主要介紹了django admin 使用SimpleUI自定義按鈕彈窗框示例,需要的朋友可以參考下2023-04-04
采用自執(zhí)行的匿名函數(shù)解決for循環(huán)使用閉包的問題
這篇文章主要介紹了采用自執(zhí)行的匿名函數(shù)解決for循環(huán)使用閉包的問題,很簡單,但比較實用,需要的朋友可以參考下2014-09-09
js下獲得客戶端操作系統(tǒng)的函數(shù)代碼(1:vista,2:windows7,3:2000,4:xp,5:2003,6:20
有時候需要在客戶端獲取操作系統(tǒng)的版本,以便更好的給用戶合適的信息,提高用戶體驗,好不容易從網(wǎng)站發(fā)現(xiàn)了這段代碼,分享給大家。2011-10-10

