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

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

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

一、TouchEvent觸摸事件對象

1、TouchEvent概念

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

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

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

2、TouchEvent的核心屬性

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

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

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

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

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

3、單個觸點信息Touch對象

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

Touch對象的常用屬性如下 :

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

4、觸摸事件對象TouchEvent對應的觸摸事件類型

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

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

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

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

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

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

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

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

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

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

相關文章

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

    基于BootStrap Metronic開發(fā)框架經(jīng)驗小結【三】下拉列表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)換和表格生成,本文結合實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2026-04-04
  • JS性能優(yōu)化實現(xiàn)方法及優(yōu)點進行

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

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

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

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

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

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

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

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

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

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

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

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

    關于js陀螺儀的理解分析

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

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

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

最新評論

滦南县| 张掖市| 太仆寺旗| 永寿县| 鞍山市| 邵武市| 双桥区| 镇远县| 阿拉尔市| 广安市| 伊宁县| 聂拉木县| 托克逊县| 通渭县| 饶平县| 启东市| 晋城| 皋兰县| 炎陵县| 绩溪县| 昌江| 永川市| 开封县| 祁连县| 广东省| 大名县| 阳信县| 临洮县| 萝北县| 北流市| 青龙| 蓬莱市| 潼南县| 博客| 韶关市| 河西区| 东明县| 华蓥市| 合阳县| 屏边| 原平市|