亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關于keyCode的三個問題?

關于keyCode的三個問題?

江戶川亂折騰 2018-12-20 18:11:25
if (ev.keyCode == 13 && ev.ctrlKey) {//----------**問題1處:**                var oLi = document.createElement('li');                oLi.innerHTML = this.value;                                if ( oUl.children[0] ) {                    oUl.insertBefore( oLi, oUl.children[0] );                } else {                    oUl.appendChild( oLi );                }                            }問題1:keycode只能顯示一個值,ctrl鍵本身就是17,在按下enter(13)時又按下ctrl鍵,不就把13替換成17了嗎?跟這樣寫ev.keyCode == 13 && ev.keyCode == 17有什么區別,ev.keyCode是不可能同時得到兩個值的額?問題2:要是網頁上面有賽車游戲需要一直按住上鍵,然后用左右控制方向的話,那需要怎么辦呢?問題3:網頁中不分刪除下面的enter和小鍵盤中的enter嗎?但是ps軟件中的話這兩個enter功能是有區別的額,網頁不能實現類似ps的區分兩個不同enter鍵的功能嗎?
查看完整描述

1 回答

?
慕沐林林

TA貢獻2016條經驗 獲得超9個贊

首先,就算同時按下兩個鍵,也會有一點時間誤差而不是真的同時,一定是一先一后。所以按下 enter,再按下ctrl,會觸發兩個 keydown 事件,其 keyCode 分別是 13 和 17。


現在你可以按往 ctrl 不放,再按其它鍵,它們都會觸發 keydown 等事件,而現在這些事件的 e.ctrlKey 就是 true 了。


keydown 事件之后,你可以設置一個標志變量,比如


let isUpPressing = false;

xxxx.on("keydown", e => {

    if (e.keyCode === 38) {

        isUpPressing = true;

    }

});

現在,只要你沒改變這 isUpPressing 的值,它就始終下于 up 鍵按下的狀態,雖然有可能 up 鍵已經放開了。當然在這個狀態下你再按其它鍵,就可以用一堆變量來組合復合狀態了。


剛才說了,up 放開了,但 isUpPressing 仍然是 true,所以我們需要處理這個問題,當然是用 keyup 事件來解決


xxxx.on("keyup", e => {

    if (e.keyCode === 38) {

        isUpPressing = false;

    }

});

小鍵盤的 0 到 9 對應的 keyCode 是 96 到 105。不過貌似沒有區分小鍵盤上的功能鍵。


查看完整回答
反對 回復 2019-01-19
  • 1 回答
  • 0 關注
  • 360 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號