电竞比分网-中国电竞赛事及体育赛事平台

分享

WEB前端第三十三課——js事件處理-鍵盤(pán)、觸摸

 精品唯居 2021-09-22

1.鍵盤(pán)事件

  鍵盤(pán)事件是指當(dāng)用戶操作鍵盤(pán)的時(shí)候會(huì)自動(dòng)被觸發(fā)的事件,通常分為以下三種

    ① keydown,用戶按下任意鍵都可以觸發(fā)這個(gè)事件,如果按住不放,事件會(huì)被連續(xù)觸發(fā)

   ?、?nbsp;keypress,用戶按下任意鍵都可以觸發(fā)這個(gè)事件,如果按住不放,事件會(huì)被連續(xù)觸發(fā)

           這里的任意鍵是指可顯示的鍵,不包括功能鍵

           keypress方法識(shí)別大小寫(xiě),而 keydown不區(qū)分

   ?、?nbsp;keyup,用戶釋放按鍵時(shí)觸發(fā)事件

  鍵盤(pán)事件一般都是綁定在需要用戶輸入的元素上(例如 input),但是由于鍵盤(pán)事件默認(rèn)采用事件冒泡機(jī)制,

  因此,將鍵盤(pán)事件直接綁定在 body上也是允許的

  語(yǔ)法:元素節(jié)點(diǎn) .on+事件名 = function(){ };

2.keyCode屬性

  在鍵盤(pán)事件中,可以通過(guò) event .keyCode來(lái)獲取按下的鍵的編碼值

  通過(guò)這個(gè)屬性,可以獲取到用戶按下過(guò)哪些鍵

3.特點(diǎn)總結(jié)

  ① 捕獲對(duì)象范圍區(qū)別

    keypress主要用于捕獲:數(shù)字(包括 shift+數(shù)字的符號(hào))、字母(包括大小寫(xiě))、小鍵盤(pán)等能夠顯示在屏幕上的內(nèi)容

    但不能對(duì)系統(tǒng)功能鍵(回車(chē)、刪除、方向等)進(jìn)行正常響應(yīng),另外,不能對(duì)中文輸入法有效響應(yīng)

    而 keydown和 keyup通??梢圆东@鍵盤(pán)上除了 PrtSc之外所有按鍵(特殊鍵盤(pán)的特殊鍵不在討論范圍)

 ?、?nbsp;捕獲字符長(zhǎng)度區(qū)別

    keypress只能捕獲單個(gè)字符

    keydown和 keyup可以捕獲組合鍵

  ③ 捕獲字符大小寫(xiě)區(qū)別

    keypress可以捕獲單個(gè)字符的大小寫(xiě)

    keydown和 keyup對(duì)于單個(gè)字符捕獲的 keyCode大小寫(xiě)都是同一個(gè)值,即不能判斷大小寫(xiě)

  ④ 捕獲字符數(shù)字區(qū)別

    keypress不區(qū)分小鍵盤(pán)和主鍵盤(pán)的數(shù)字字符

    keydown和 keyup區(qū)分小鍵盤(pán)和主鍵盤(pán)的數(shù)字字符

 ?、?nbsp;特殊情況

    PrScrn按鍵 keyPress、keyDown和 keyUp都不能捕獲

    上下左右功能鍵 keyDown、keyUp都能獲取 keyCode,并且值相同

4.常見(jiàn)鍵盤(pán)按鍵keyCode

  

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>鍵盤(pán)事件</title>
</head>
<body>
    <input type="text">
    <span class="tips"></span>
<script>
    var tips=document.querySelector('.tips')
    var input=document.querySelector('input');
    input.onkeydown=function () {
        console.log('downKey:'+event.keyCode);
        if (event.keyCode==13){
            console.log(input.value);
        }
    }
    input.onkeypress=function(){
        console.log('pressKey:'+event.keyCode);
    };
    //檢測(cè)大寫(xiě)鎖定是否開(kāi)啟
    var flag=false;
    document.body.onkeydown=function () {
        if (event.keyCode==20){
            if (flag ==false){
                flag = true;
                tips.innerHTML='大寫(xiě)鎖定已開(kāi)啟';
            }else{
                flag = false;
                tips.innerHTML='大寫(xiě)鎖定已關(guān)閉';
            }
        }
    }
</script>
</body>
</html>

 

5.觸摸事件

 ?、?nbsp;touchstart,手指觸摸屏幕時(shí)觸發(fā),即使已經(jīng)有一個(gè)手指在屏幕上了,也會(huì)觸發(fā)

 ?、?nbsp;touchmove,手指在屏幕上滑動(dòng)時(shí)連續(xù)的觸發(fā)

 ?、?nbsp;touchend,手指從屏幕上移開(kāi)時(shí)觸發(fā)

 ?、?nbsp;touchcancel,系統(tǒng)停止跟蹤觸摸時(shí)觸發(fā)(如電話接入、彈出信息等,一般用于觸發(fā)暫停類(lèi)的操作)

  語(yǔ)法示例:

    元素節(jié)點(diǎn) .addEventListener(' touchstart ', function(){ });
  注意:

    如非特別說(shuō)明,事件均為冒泡事件

    手機(jī)觸摸事件必須使用 DOM2方式進(jìn)行綁定

    可以給一個(gè)元素添加多個(gè)觸摸事件

6.事件對(duì)象的屬性

  事件對(duì)象,是“事件觸發(fā)時(shí)”用來(lái)保存“事件相關(guān)的所有信息的對(duì)象”

  事件對(duì)象基本都是系統(tǒng)自動(dòng)生成,不需要手動(dòng)創(chuàng)建

  示例:

    元素節(jié)點(diǎn) .addEventListener(' touchstart ',

      function(event){

        console.log(' touches begin ');

      });

  主要屬性:

   ?、?touches,表示當(dāng)前跟蹤的觸摸操作的 Touch對(duì)象的數(shù)組(當(dāng)前屏幕上所有的觸摸點(diǎn)列表)

   ?、?nbsp;targetTouches,特定于事件目標(biāo)的 Touch對(duì)象的數(shù)組(當(dāng)前對(duì)象上所有的觸摸點(diǎn)列表)

   ?、?nbsp;changeTouches,表示自上次觸摸以來(lái)發(fā)生了什么改變的 Touch對(duì)象的數(shù)組(涉及當(dāng)前事件的觸摸點(diǎn)列表)

7.觸摸對(duì)象的屬性

  觸摸對(duì)象,即 事件對(duì)象的 Touches屬性中的每一個(gè)元素

  一次觸摸會(huì)創(chuàng)建一個(gè)觸摸對(duì)象

  觸摸對(duì)象中提供了很多屬性可供獲取和使用:

    clientX,觸摸目標(biāo)在視口中的橫坐標(biāo)

    clientY,觸摸目標(biāo)在視口中的縱坐標(biāo)

    identifier,表示觸摸的唯一ID

    pageX,觸摸目標(biāo)在頁(yè)面中的橫坐標(biāo)

    pageY,觸摸目標(biāo)在頁(yè)面中的縱坐標(biāo)

    screenX,觸摸目標(biāo)在屏幕中的X坐標(biāo)

    screenY,觸摸目標(biāo)在屏幕中的Y坐標(biāo)

    target,觸摸的 DOM節(jié)點(diǎn)坐標(biāo)

  一般情況下,在事件被觸發(fā)時(shí)通過(guò)“ pageX和 pageY”兩個(gè)屬性來(lái)獲取當(dāng)前節(jié)點(diǎn)的位置

  獲取觸摸點(diǎn)坐標(biāo)書(shū)寫(xiě)格式:

    event .touches[n] .pageX / pageY;  // n表示第幾個(gè)觸摸點(diǎn)

<body>
    <div class="divTouch" style="width: 500px;height: 600px;background-color: lightgreen;"></div>
<script>
    var divTouch=document.querySelector('.divTouch');
    divTouch.addEventListener('touchstart',function () {
        console.log(event.touches[0].pageX);
        console.log(event.touches[0].pageY);
        console.log(event.touches[0].clientX);
        console.log(event.touches[0].screenX);
        console.log(event);
    });
</script>
</body>

  

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多