最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript?touch觸摸事件的使用講解

 更新時間:2026年01月02日 09:54:32   作者:韓曙亮  
這篇文章主要介紹了JavaScript?touch觸摸事件的使用,JavaScript中的觸摸事件對象TouchEvent是處理移動設(shè)備觸摸交互的核心接口,承載了觸摸操作的所有相關(guān)信息,需要的朋友可以參考下

一、TouchEvent觸摸事件對象

1、TouchEvent概念

JavaScript 中的 觸摸事件對象 TouchEvent 是處理 移動設(shè)備 ( 手機(jī)、平板等 ) 觸摸交互 的 核心接口 ;

觸摸事件對象 TouchEvent 是 DOM 事件接口 的一種 , 專門用于表示 觸摸設(shè)備 上的 觸點交互事件 , 它承載了 觸摸操作 的所有 相關(guān)信息 ( 如觸點位置、數(shù)量、狀態(tài)等 ) , 僅在 支持觸摸 的設(shè)備 ( 移動端設(shè)備、帶觸摸屏的桌面設(shè)備 ) 上觸發(fā) ;

與 普通鼠標(biāo)事件 ( click、mousemove ) 不同 , TouchEvent 支持 多點觸摸 ( 多個手指同時觸摸屏幕 ) , 這是它的核心特性 ;

2、TouchEvent的核心屬性

觸摸事件對象 TouchEvent 包含多個關(guān)鍵屬性 , 其中最核心的是三個觸摸列表屬性 , 均為TouchList類型 , 類數(shù)組結(jié)構(gòu) , 包含多個 Touch 對象 ;

touches 屬性 : 當(dāng)前屏幕上 所有活躍的觸點 ( 無論觸點是否針對當(dāng)前元素 ) , 比如多手指觸摸時 , 所有手指的觸點都在此列表中 ;

targetTouches 屬性 : 當(dāng)前 綁定事件 的 元素 上的 活躍觸點 , 僅包含觸摸在當(dāng)前元素上的觸點 , 排除其他元素上的觸點 ;

changedTouches 屬性 : 本次事件發(fā)生時 狀態(tài)發(fā)生變化的觸點 ;

  • touchstart : 新增 的觸點 ( 剛按下的手指 )
  • touchmove : 移動 的觸點
  • touchend : 離開屏幕 的觸點 ( 抬起的手指 )
  • touchcancel : 被中斷 的觸點

3、單個觸點信息Touch對象

觸摸事件對象 TouchEvent 的 touches、targetTouches 、changedTouches 都是 TouchList 類型 , TouchList 中的每一個元素都是 Touch 對象 , 它表示 單個觸摸觸點 的詳細(xì)信息 ;

Touch對象的常用屬性如下 :

  • identifier 屬性 : 唯一標(biāo)識 觸點 的 ID ( 數(shù)字 ) , 用于 區(qū)分 多點觸摸 中的 不同手指 , 避免混淆 ;
  • target 屬性 : 觸發(fā) 觸摸事件 的元素 , 觸點最初接觸的 DOM 元素 ;
  • clientX / clientY 屬性 : 觸點 相對于 視口左上角 的 坐標(biāo) , 不包含滾動條偏移 ;
  • pageX / pageY 屬性 : 觸點 相對于 文檔左上角 的 坐標(biāo) , 包含滾動條偏移 ;
  • screenX / screenY 屬性 : 觸點 相對于 屏幕左上角 的 坐標(biāo) , 設(shè)備物理屏幕坐標(biāo) ;

4、觸摸事件對象TouchEvent對應(yīng)的觸摸事件類型

觸摸事件對象 TouchEvent 對應(yīng)的 事件類型 主要有 4 種 , 覆蓋觸摸的完整生命周期 :

touchstart 觸摸開始事件 : 當(dāng)手指首次觸摸到屏幕時觸發(fā) ( 類似鼠標(biāo)事件mousedown ) ;

        // 1. 綁定觸摸開始事件 ( touchstart )  : 當(dāng)手指首次觸摸到元素時觸發(fā)
        touchBox.addEventListener('touchstart', (e) => {
        	// e 是 TouchEvent 類型對象
            // 獲取當(dāng)前發(fā)生變化的觸點列表 ( touchstart時為新增的觸點 ) 
            const touchList = e.changedTouches;
            }
        });

touchmove 觸摸移動事件 : 當(dāng)手指在屏幕上滑動 ( 移動 ) 時持續(xù)觸發(fā) ( 類似鼠標(biāo)事件mousemove ) ;

        // 2. 綁定觸摸移動事件 ( touchmove )  : 當(dāng)手指在元素上滑動移動時持續(xù)觸發(fā)
        touchBox.addEventListener('touchmove', (e) => {
        	// e 是 TouchEvent 類型對象
            // 獲取當(dāng)前發(fā)生變化的觸點列表 ( touchmove時為正在移動的觸點 ) 
            const touchList = e.changedTouches;
            }
        });

touchend 觸摸結(jié)束事件 : 當(dāng)手指從屏幕上抬起 ( 離開 ) 時觸發(fā) ( 類似鼠標(biāo)事件mouseup ) ;

        // 3. 綁定觸摸結(jié)束事件 ( touchend )  : 當(dāng)手指從元素上離開 ( 觸摸完成 ) 時觸發(fā)
        touchBox.addEventListener('touchend', (e) => {
        	// e 是 TouchEvent 類型對象
            // 獲取當(dāng)前發(fā)生變化的觸點列表 ( touchend時為即將離開的觸點 ) 
            const touchList = e.changedTouches;
        });

touchcancel 觸摸取消事件 : 觸摸事件被意外中斷時觸發(fā) ( 如觸摸過程中頁面跳轉(zhuǎn)、彈出系統(tǒng)彈窗、觸摸區(qū)域被隱藏等 )

        // 4. 綁定觸摸中斷事件 ( touchcancel )  : 當(dāng)觸摸被意外中斷時觸發(fā) ( 如來電、彈窗遮擋等 ) 
        touchBox.addEventListener('touchcancel', (e) => {
        	// e 是 TouchEvent 類型對象
            // 獲取當(dāng)前發(fā)生變化的觸點列表 ( touchcancel時為被中斷的觸點 ) 
            const touchList = e.changedTouches;
        });

二、代碼示例 - TouchEvent 觸摸事件對象

1、代碼示例

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>TouchEvent 觸摸對象示例</title>
    <style>
        .touchBox {
            /* ID 選擇器 : 選中頁面中 class 屬性值為 " touchBox " 的 HTML 元素 , 開始定義該元素的樣式集合 */
            /* 寬度設(shè)置 : 將元素寬度設(shè)為其父元素寬度的100% , 實現(xiàn)寬度自適應(yīng)父容器 */
            width: 100%;
            /* 高度設(shè)置 : 給元素設(shè)置固定高度為300像素 , 元素高度不會隨內(nèi)容多少自動變化 ( 內(nèi)容超出會溢出 )  */
            height: 200px;
            /* 背景顏色設(shè)置 : 為元素設(shè)置淺灰色背景 ( 十六進(jìn)制顏色值#f0f0f0對應(yīng)淺灰 )  , 填充元素的背景區(qū)域 */
            background-color: #f0f0f0;
            /* 邊框設(shè)置 : 簡寫屬性 , 同時設(shè)置元素四個方向的邊框 ( 1像素寬、實線樣式、淺灰色#ccc )  , 無需分別定義上下左右邊框 */
            border: 1px solid #ccc;
            /* 外邊距設(shè)置 : 簡寫屬性 , 上下外邊距為20像素 , 左右外邊距為0 , 控制元素與其他元素的外部間距 */
            margin: 20px 0;
            /* 內(nèi)邊距設(shè)置 : 簡寫屬性 , 四個方向 ( 上、右、下、左 ) 的內(nèi)邊距均為10像素 , 控制元素內(nèi)容與邊框的內(nèi)部間距 */
            padding: 10px;
            /* 結(jié)束#touchBox元素的樣式定義 */
        }
        .log {
            /* ID選擇器 : 選中頁面中 class 屬性值為 " log " 的 HTML 元素 , 開始定義該元素的樣式集合 */
            /* 高度設(shè)置 : 給元素設(shè)置固定高度為200像素 , 限制元素的垂直顯示區(qū)域 */
            height: 300px;
            /* 垂直溢出處理 : 當(dāng)元素內(nèi)的內(nèi)容高度超過 200 像素時 , 自動顯示垂直滾動條 ; 內(nèi)容未溢出時 , 不顯示滾動條 */
            overflow-y: auto;
            /* 邊框設(shè)置 : 簡寫屬性 , 同時設(shè)置元素四個方向的邊框 ( 1像素寬、實線樣式、淺灰色#ccc )  , 勾勒元素輪廓 */
            border: 1px solid #ccc;
            /* 內(nèi)邊距設(shè)置 : 簡寫屬性 , 四個方向的內(nèi)邊距均為10像素 , 避免內(nèi)容緊貼邊框 , 提升視覺效果 */
            padding: 10px;
            /* 結(jié)束 .log 元素的樣式定義 */
        }
    </style>
</head>
<body>
    <div class="touchBox">觸摸我 ( 支持多點觸摸 ) </div>
    <div class="log"></div>
    <script>
        // 通過ID選擇器獲取頁面中 class 為 "touchBox"的 DOM 元素 , 用于綁定觸摸事件
        const touchBox = document.querySelector('.touchBox');
        // 通過ID選擇器獲取頁面中 class 為 " log " 的 DOM 元素 , 用于展示觸摸事件日志信息
        const log = document.querySelector('.log');
        // 日志打印函數(shù) : 負(fù)責(zé)將觸摸事件信息格式化后添加到日志容器中
        function printLog(content) {
            // 創(chuàng)建當(dāng)前時間的本地化時間字符串 ( 格式如 : 14:23:45 )  , 用于日志時間戳
            const now = new Date().toLocaleTimeString();
            // 將新日志添加到日志容器頂部 ( 通過拼接 HTML , 新內(nèi)容在前 , 原有內(nèi)容在后 , 
實現(xiàn)換行 ) 
            log.innerHTML = `[${now}] ${content}
` + log.innerHTML;
            // 限制日志條數(shù) : 當(dāng)日志容器的子元素數(shù)量超過20條時 , 刪除最后一條 ( 最舊的 ) 日志
            if (log.children.length > 20) {
                log.removeChild(log.lastChild);
            }
        }
        // 1. 綁定觸摸開始事件 ( touchstart )  : 當(dāng)手指首次觸摸到元素時觸發(fā)
        touchBox.addEventListener('touchstart', (e) => {
            // 阻止觸摸事件的默認(rèn)行為 ( 避免頁面因觸摸產(chǎn)生滾動、縮放等干擾操作 ) 
            e.preventDefault();
            // 獲取當(dāng)前發(fā)生變化的觸點列表 ( touchstart時為新增的觸點 ) 
            const touchList = e.changedTouches;
            // 遍歷所有變化的觸點 , 逐個打印詳細(xì)信息
            for (let i = 0; i < touchList.length; i++) {
                const touch = touchList[i];
                // 打印touchstart事件詳情 : 包含觸點唯一ID、坐標(biāo)、元素當(dāng)前觸點數(shù)、屏幕總觸點數(shù)
                printLog(`【touchstart】觸點ID : ${touch.identifier} , 坐標(biāo) ( pageX: ${touch.pageX}, pageY: ${touch.pageY} )  , 當(dāng)前元素觸點數(shù) : ${e.targetTouches.length} , 屏幕總觸點數(shù) : ${e.touches.length}`);
            }
        });
        // 2. 綁定觸摸移動事件 ( touchmove )  : 當(dāng)手指在元素上滑動移動時持續(xù)觸發(fā)
        touchBox.addEventListener('touchmove', (e) => {
            // 阻止觸摸事件的默認(rèn)行為 ( 避免滑動時觸發(fā)頁面滾動 ) 
            e.preventDefault();
            // 獲取當(dāng)前發(fā)生變化的觸點列表 ( touchmove時為正在移動的觸點 ) 
            const touchList = e.changedTouches;
            // 遍歷所有移動的觸點 , 打印實時位置信息
            for (let i = 0; i < touchList.length; i++) {
                const touch = touchList[i];
                // 打印touchmove事件詳情 : 包含觸點唯一ID和實時頁面坐標(biāo)
                printLog(`【touchmove】觸點ID : ${touch.identifier} , 實時坐標(biāo) ( pageX: ${touch.pageX}, pageY: ${touch.pageY} ) `);
            }
        });
        // 3. 綁定觸摸結(jié)束事件 ( touchend )  : 當(dāng)手指從元素上離開 ( 觸摸完成 ) 時觸發(fā)
        touchBox.addEventListener('touchend', (e) => {
            // 阻止觸摸事件的默認(rèn)行為 ( 避免后續(xù)默認(rèn)操作干擾 ) 
            e.preventDefault();
            // 獲取當(dāng)前發(fā)生變化的觸點列表 ( touchend時為即將離開的觸點 ) 
            const touchList = e.changedTouches;
            // 遍歷所有即將離開的觸點 , 打印離開時的信息
            for (let i = 0; i < touchList.length; i++) {
                const touch = touchList[i];
                // 打印touchend事件詳情 : 包含觸點唯一ID、離開坐標(biāo)、元素剩余觸點數(shù)、屏幕總觸點數(shù)
                printLog(`【touchend】觸點ID : ${touch.identifier} , 離開坐標(biāo) ( pageX: ${touch.pageX}, pageY: ${touch.pageY} )  , 剩余元素觸點數(shù) : ${e.targetTouches.length} , 屏幕總觸點數(shù) : ${e.touches.length}`);
            }
        });
        // 4. 綁定觸摸中斷事件 ( touchcancel )  : 當(dāng)觸摸被意外中斷時觸發(fā) ( 如來電、彈窗遮擋等 ) 
        touchBox.addEventListener('touchcancel', (e) => {
            // 阻止觸摸事件的默認(rèn)行為
            e.preventDefault();
            // 獲取當(dāng)前發(fā)生變化的觸點列表 ( touchcancel時為被中斷的觸點 ) 
            const touchList = e.changedTouches;
            // 遍歷所有被中斷的觸點 , 打印中斷信息
            for (let i = 0; i < touchList.length; i++) {
                const touch = touchList[i];
                // 打印touchcancel事件詳情 : 包含觸點唯一ID和中斷提示
                printLog(`【touchcancel】觸點ID : ${touch.identifier} , 被中斷`);
            }
        });
    </script>
</body>
</html>

2、執(zhí)行結(jié)果

以上就是JavaScript touch觸摸事件的使用講解的詳細(xì)內(nèi)容,更多關(guān)于JavaScript touch觸摸事件的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 基于BootStrap Metronic開發(fā)框架經(jīng)驗小結(jié)【三】下拉列表Select2插件的使用

    基于BootStrap Metronic開發(fā)框架經(jīng)驗小結(jié)【三】下拉列表Select2插件的使用

    本文主要給大家介紹在編輯頁面中常用到的控件Select2,這個控件可以更加豐富傳統(tǒng)的Select下拉列表控件,提供更多的功能和更好的用戶體驗,
    2016-05-05
  • JavaScript讀取Excel文件實戰(zhàn)指南

    JavaScript讀取Excel文件實戰(zhàn)指南

    本文介紹了使用JavaScript處理Excel數(shù)據(jù)的方法,重點介紹了XLSX庫的基本使用和核心API,文章還探討了從JSON數(shù)據(jù)生成Excel工作表、數(shù)據(jù)轉(zhuǎn)換和表格生成,本文結(jié)合實例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2026-04-04
  • JS性能優(yōu)化實現(xiàn)方法及優(yōu)點進(jìn)行

    JS性能優(yōu)化實現(xiàn)方法及優(yōu)點進(jìn)行

    這篇文章主要介紹了JS性能優(yōu)化實現(xiàn)方法及優(yōu)點進(jìn)行,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08
  • javascript實現(xiàn)獲取瀏覽器版本、瀏覽器類型

    javascript實現(xiàn)獲取瀏覽器版本、瀏覽器類型

    這篇文章主要介紹了javascript實現(xiàn)獲取瀏覽器版本,javascript實現(xiàn)獲取瀏覽器類型兩大方面,對這方面感興趣的朋友可以參考一下
    2015-12-12
  • JS+CSS實現(xiàn)仿觸屏手機(jī)撥號盤界面及功能模擬完整實例

    JS+CSS實現(xiàn)仿觸屏手機(jī)撥號盤界面及功能模擬完整實例

    這篇文章主要介紹了JS+CSS實現(xiàn)仿觸屏手機(jī)撥號盤界面及功能模擬完整實例,可以實現(xiàn)逼真模擬手機(jī)撥號盤界面并實現(xiàn)點擊輸入對應(yīng)號碼的功能,需要的朋友可以參考下
    2015-05-05
  • 詳解JSON和JSONP劫持以及解決方法

    詳解JSON和JSONP劫持以及解決方法

    這篇文章主要介紹了詳解JSON和JSONP劫持以及解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Echarts折線圖設(shè)置線條顏色及線條以下代碼示例

    Echarts折線圖設(shè)置線條顏色及線條以下代碼示例

    最近項目需要,一直在使用Echarts視圖,現(xiàn)在遇到一個要修改echarts折線圖顏色的需求,下面這篇文章主要給大家介紹了關(guān)于Echarts折線圖設(shè)置線條顏色及線條以下區(qū)域漸變顏色的相關(guān)資料,需要的朋友可以參考下
    2024-02-02
  • 微信小程序?qū)崿F(xiàn)音樂播放器實例完整流程

    微信小程序?qū)崿F(xiàn)音樂播放器實例完整流程

    這篇文章主要介紹了微信小程序?qū)崿F(xiàn)音樂播放器實例完整流程,通過本章的學(xué)習(xí),讀者能夠掌握小程序的基本交互邏輯的開發(fā),能夠運用API來實現(xiàn)項目中的特定功能,學(xué)會解決開發(fā)過程中常見的問題,需要的朋友可以參考下
    2024-10-10
  • 關(guān)于js陀螺儀的理解分析

    關(guān)于js陀螺儀的理解分析

    這篇文章主要給大家介紹了關(guān)于js陀螺儀的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用js具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • js中獲取鍵盤事件的簡單實現(xiàn)方法

    js中獲取鍵盤事件的簡單實現(xiàn)方法

    下面小編就為大家?guī)硪黄猨s中獲取鍵盤事件的簡單實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-10-10

最新評論

手机| 甘洛县| 吉安市| 铅山县| 铁力市| 凤冈县| 泰和县| 徐闻县| 霍州市| 江山市| 夏邑县| 个旧市| 泰来县| 普宁市| 昭通市| 天长市| 海安县| 松溪县| 磐安县| 敦煌市| 朔州市| 镶黄旗| 抚远县| 罗江县| 中方县| 南安市| 大洼县| 通海县| 新晃| 昭通市| 涞源县| 兴安盟| 华容县| 武陟县| 鸡东县| 清远市| 南通市| 黄龙县| 沂南县| 观塘区| 云霄县|