jstouch事件詳解

jstouch是JavaScript中一個非常重要的事件,在移動端開發領域中尤為常見。它能夠監控用戶在觸摸屏幕上滑動、點擊和長按等操作,提供了豐富的交互能力。本文將從touch事件、touch事件位置、js事件onchange、移動端基本的touch事件、jsfocus事件等多個方面對jstouch事件做詳細的闡述。

一、touch事件

touch是jstouch事件的核心概念,它代表用戶在移動設備屏幕上點擊、拖拽、滑動等操作的觸摸點。touch事件有一些比較重要的概念及屬性,下面一一介紹。

1. touchstart事件

touchstart事件是在用戶觸摸屏幕上的某一位置時觸發的事件。

<script>
    document.addEventListener('touchstart', function(event) {
        console.log('touchstart', event);
    }, false);
</script>

2. touchmove事件

touchmove事件是在用戶觸摸屏幕上某一位置並在屏幕上滑動時觸發的事件。

<script>
    document.addEventListener('touchmove', function(event) {
        console.log('touchmove', event);
    }, false);
</script>

3. touchend事件

touchend事件是在用戶停止觸摸屏幕上某一位置時觸發的事件。

<script>
    document.addEventListener('touchend', function(event) {
        console.log('touchend', event);
    }, false);
</script>

二、touch事件位置

在touch事件中,event對象中還有關於觸摸點位置的重要屬性clientX和clientY。clientX代表用戶在屏幕上觸摸點的x坐標,clientY代表用戶在屏幕上觸摸點的y坐標。

<script>
    document.addEventListener('touchstart', function(event) {
        console.log(`touchstart at (${event.touches[0].clientX},${event.touches[0].clientY})`);
    }, false);
</script>

三、js事件onchange

onchange事件是input元素的一個重要事件,它會在輸入框的值改變時觸發。通過配合touch事件,我們可以實現許多有趣的交互效果。

1. touch事件與onchange事件

<script>
    var input = document.querySelector('input');
    input.addEventListener('touchstart', function() {
        input.addEventListener('change', function(e) {
            console.log('input changed', e.target.value);
        }, false);
    }, false);
</script>

2. 延遲觸發與防抖動

由於用戶在輸入時頻繁觸發change事件,因此我們要將其延遲處理或者使用防抖動的方法。

<script>
    var input = document.querySelector('input');
    var timeoutId;
    input.addEventListener('touchstart', function() {
        timeoutId = setTimeout(function() {
            input.addEventListener('change', function(e) {
                console.log('input changed', e.target.value);
            }, false);
        }, 300);
    }, false);

    input.addEventListener('touchend', function() {
        clearTimeout(timeoutId);
        input.removeEventListener('change', function() {});
    }, false);
</script>

四、移動端基本的touch事件

移動端常用的touch事件包括:tap、doubletap、swipeLeft、swipeRight、swipeUp、swipeDown、longtap等,在實際開發中,它們可以提供非常豐富的交互效果。

1. tap事件

tap事件是在短時間內連續點擊同一元素時觸發的事件。

<script>
    var div = document.querySelector('div');
    div.addEventListener('touchstart', function(event) {
        var startTime = new Date().getTime();
        var touch = event.touches[0];
        var x = touch.pageX;
        var y = touch.pageY;

        div.addEventListener('touchend', function(event) {
            var duration = new Date().getTime() - startTime;
            var touch = event.changedTouches[0];
            var deltaX = touch.pageX - x;
            var deltaY = touch.pageY - y;

            if (duration <= 300 && Math.abs(deltaX) < 5 && Math.abs(deltaY) < 5) {
                console.log('tap');
            }
        }, false);
    }, false);
</script>

2. doubletap事件

doubletap事件是在用戶在短時間內雙擊同一元素時觸發的事件。

<script>
    var div = document.querySelector('div');
    var lastTapTime = 0;
    div.addEventListener('touchstart', function(event) {
        var currentTime = new Date().getTime();
        var duration = currentTime - lastTapTime;
        if (duration <= 300) {
            console.log('doubletap');
        }
        lastTapTime = currentTime;
    }, false);
</script>

3. swipeLeft/swipeRight/swipeUp/swipeDown事件

swipeLeft/swipeRight/swipeUp/swipeDown事件是在用戶在屏幕上滑動時觸發的事件。

<script>
    var div = document.querySelector('div');
    var startX, startY;
    div.addEventListener('touchstart', function(event) {
        startX = event.touches[0].pageX;
        startY = event.touches[0].pageY;
    }, false);

    div.addEventListener('touchmove', function(event) {
        event.preventDefault();
    }, false);

    div.addEventListener('touchend', function(event) {
        var endX = event.changedTouches[0].pageX;
        var endY = event.changedTouches[0].pageY;
        var deltaX = endX - startX;
        var deltaY = endY - startY;

        if (Math.abs(deltaX) > Math.abs(deltaY) && Math.abs(deltaX) >= 50) {
            if (deltaX > 0) {
                console.log('swipeRight');
            } else {
                console.log('swipeLeft');
            }
        } else if (Math.abs(deltaY) >= Math.abs(deltaX) && Math.abs(deltaY) >= 50) {
            if (deltaY > 0) {
                console.log('swipeDown');
            } else {
                console.log('swipeUp');
            }
        }
    }, false);
</script>

五、jsfocus事件

當用戶在移動設備上訪問網頁時,訪問元素時自動彈出鍵盤可能會影響用戶體驗。jsfocus事件能夠在移動設備上實現類似於click事件的效果,同時不會自動彈出鍵盤,提高了用戶交互的友好度。

<script>
    var input = document.querySelector('input');
    input.addEventListener('touchstart', function(event) {
        input.focus();
    }, false);
</script>

原創文章,作者:WGVM,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/148084.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
WGVM的頭像WGVM
上一篇 2024-11-02 13:15
下一篇 2024-11-02 13:15

相關推薦

  • 抖音外放親媽下葬事件的背後真相

    近期,一段抖音外放親媽下葬的視頻引發廣泛關注和熱議。不少人對這個事件感到震驚和憤怒,認為這種行為非常不尊重親人,觸犯了社會公德和家庭道德。但是,事情真相到底是什麼呢?我們有必要從多…

    編程 2025-04-28
  • cc.director.on事件監聽器

    本文將從多個方面詳細介紹Cocos Creator中的cc.director.on事件監聽器。 一、cc.director.on的作用和用法 cc.director.on是Coco…

    編程 2025-04-27
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁盤中。在執行sync之前,所有的文件系統更新將不會立即寫入磁盤,而是先緩存在內存…

    編程 2025-04-25
  • 神經網絡代碼詳解

    神經網絡作為一種人工智能技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網絡的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網絡模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • Python安裝OS庫詳解

    一、OS簡介 OS庫是Python標準庫的一部分,它提供了跨平台的操作系統功能,使得Python可以進行文件操作、進程管理、環境變量讀取等系統級操作。 OS庫中包含了大量的文件和目…

    編程 2025-04-25
  • Linux修改文件名命令詳解

    在Linux系統中,修改文件名是一個很常見的操作。Linux提供了多種方式來修改文件名,這篇文章將介紹Linux修改文件名的詳細操作。 一、mv命令 mv命令是Linux下的常用命…

    編程 2025-04-25
  • Java BigDecimal 精度詳解

    一、基礎概念 Java BigDecimal 是一個用於高精度計算的類。普通的 double 或 float 類型只能精確表示有限的數字,而對於需要高精度計算的場景,BigDeci…

    編程 2025-04-25
  • git config user.name的詳解

    一、為什麼要使用git config user.name? git是一個非常流行的分布式版本控制系統,很多程序員都會用到它。在使用git commit提交代碼時,需要記錄commi…

    編程 2025-04-25
  • Python輸入輸出詳解

    一、文件讀寫 Python中文件的讀寫操作是必不可少的基本技能之一。讀寫文件分別使用open()函數中的’r’和’w’參數,讀取文件…

    編程 2025-04-25
  • MPU6050工作原理詳解

    一、什麼是MPU6050 MPU6050是一種六軸慣性傳感器,能夠同時測量加速度和角速度。它由三個傳感器組成:一個三軸加速度計和一個三軸陀螺儀。這個組合提供了非常精細的姿態解算,其…

    編程 2025-04-25

發表回復

登錄後才能評論