前端如何監(jiān)聽手機(jī)鍵盤是否彈起示例詳解
摘要:
開發(fā)移動(dòng)端中,經(jīng)常會(huì)遇到一些交互需要通過判斷手機(jī)鍵盤是否被喚起來做的,說到判斷手機(jī)鍵盤彈起和收起,應(yīng)該都知道,安卓和ios判斷手機(jī)鍵盤是否彈起的寫法是有所不同的,下面討論總結(jié)一下兩端的區(qū)別以及上線方式~
HTML:
IOS端可以通過 focusin focusout
實(shí)現(xiàn)
window.addEventListener('focusin', () => { // 鍵盤彈出事件處理 alert("ios鍵盤彈出事件處理") }); window.addEventListener('focusout', () => { // 鍵盤收起事件處理 alert("ios鍵盤收起事件處理") })
安卓只能通過 resize
來判斷屏幕大小是否發(fā)生變化來判斷
由于某些 Android 手機(jī)收起鍵盤,輸入框不會(huì)失去焦點(diǎn),所以不能通過聚焦和失焦事件來判斷。但由于窗口會(huì)變化,所以可以通過監(jiān)聽窗口高度的變化來間接監(jiān)聽鍵盤的彈起與收回。
const innerHeight = window.innerHeight window.addEventListener('resize', () => { const newInnerHeight = window.innerHeight; if (innerHeight > newInnerHeight) { // 鍵盤彈出事件處理 alert("android 鍵盤彈出事件"); } else { // 鍵盤收起事件處理 alert("android 鍵盤收起事件處理") } })
VUE:
鍵盤事件總結(jié):
@keydown
:監(jiān)聽鍵盤按下事件。@keyup
:監(jiān)聽鍵盤抬起事件。@keypress
:監(jiān)聽鍵盤按鍵事件,包括按下和抬起。@keydown.enter
:監(jiān)聽回車鍵按下事件。@keydown.tab
:監(jiān)聽Tab鍵按下事件。@keydown.esc
:監(jiān)聽Esc鍵按下事件。@keydown.space
:監(jiān)聽空格鍵按下事件。@keydown.left
:監(jiān)聽左箭頭鍵按下事件。@keydown.right
:監(jiān)聽右箭頭鍵按下事件。@keydown.up
:監(jiān)聽上箭頭鍵按下事件。@keydown.down
:監(jiān)聽下箭頭鍵按下事件。@keydown.delete
:監(jiān)聽刪除鍵按下事件。@keydown.backspace
:監(jiān)聽退格鍵按下事件。@keydown.[key]
:監(jiān)聽其他特定鍵按下事件,例如@keydown.a監(jiān)聽字母A鍵按下事件。
@keydown
或@keyup
指令來綁定鍵盤按鍵事件
<template> <div> <input type="text" @keydown.enter="handleEnterKey" /> </div> </template> <script> export default { methods: { handleEnterKey() { // 處理回車鍵按下事件 }, }, }; </script>
v-on
指令來綁定鍵盤按鍵事件
<template> <div> <input type="text" v-on:keydown.enter="handleEnterKey" /> </div> </template> <script> export default { methods: { handleEnterKey() { // 處理回車鍵按下事件 }, }, }; </script>
window.addEventListener
來全局監(jiān)聽鍵盤按鍵事件
<template> <div></div> </template> <script> export default { mounted() { window.addEventListener('keydown', this.handleKeyDown); }, beforeUnmount() { window.removeEventListener('keydown', this.handleKeyDown); }, methods: { handleKeyDown(event) { if (event.key === 'Enter') { // 處理回車鍵按下事件 } }, }, }; </script>
vue-shortkey
插件來監(jiān)聽鍵盤按鍵
<template> <div> <input type="text" v-shortkey.enter="handleEnterKey" /> </div> </template> <script> import VueShortkey from 'vue-shortkey'; export default { directives: { shortkey: VueShortkey, }, methods: { handleEnterKey() { // 處理回車鍵按下事件 }, }, }; </script>
keydown
事件監(jiān)聽器
<template> <div> <input type="text" ref="input" /> </div> </template> <script> export default { mounted() { this.$refs.input.addEventListener('keydown', this.handleKeyDown); }, beforeUnmount() { this.$refs.input.removeEventListener('keydown', this.handleKeyDown); }, methods: { handleKeyDown(event) { if (event.key === 'Enter') { // 處理回車鍵按下事件 } }, }, }; </script>
監(jiān)聽事件組件封裝:
<template> <div></div> </template> <script> export default { name: 'KeyboardEventListener', props: { event: { type: String, required: true, }, }, mounted() { window.addEventListener(this.event, this.handleEvent); }, beforeUnmount() { window.removeEventListener(this.event, this.handleEvent); }, methods: { handleEvent(event) { this.$emit('keydown', event); }, }, }; </script>
可以在需要監(jiān)聽鍵盤事件的地方引入并使用KeyboardEventListener
組件,并通過event
屬性傳遞需要監(jiān)聽的事件名稱,同時(shí)監(jiān)聽keydown
事件來處理具體的按鍵邏輯。
<template> <div> <KeyboardEventListener event="keydown.enter" @keydown="handleEnterKey" /> </div> </template> <script> import KeyboardEventListener from '@/components/KeyboardEventListener.vue'; export default { components: { KeyboardEventListener, }, methods: { handleEnterKey(event) { // 處理回車鍵按下事件 }, }, }; </script>
通過封裝組件,可以在需要監(jiān)聽鍵盤事件的地方直接引入并使用,避免重復(fù)的監(jiān)聽和處理邏輯,提高代碼的可維護(hù)性和復(fù)用性
REACT:
在需要進(jìn)行監(jiān)聽的Dom上添加 onKeyDown
方法:
<Button className='btn-add' type="primary" icon="search" onKeyDown={(e)=>this.handleKeyDown(e)} onClick={()=>this.handleSearch()}> {LangMapping.Search} </Button>
定義 handleKeyDown
方法及事件處理:
//keyCode 38=up arrow 40=down arrow 13=Enter handleKeyDown = (e) => { if (e.keyCode === 13) { console.log("按下了Enter鍵") this.handleSearch(); } }
在 componentDidMount
鉤子中定義鍵盤監(jiān)聽事件:
componentDidMount() { document.addEventListener('keydown',this.handleKeyDown); }
在 componentWillUnmount
鉤子中移除鍵盤監(jiān)聽事件:
componentWillUnmount() { document.removeEventListener('keydown',this.handleKeyDown); }
ANGULAR:
檢測鍵盤按下事件:可以使用ng-keydown
指令。該指令可以監(jiān)聽指定元素上的鍵盤按下事件,并在按下事件發(fā)生時(shí)調(diào)用指定的表達(dá)式
<input type="text" ng-keydown="handleKeyDown($event)">
我們在一個(gè)文本輸入框上使用了ng-keydown
指令,并將handleKeyDown
函數(shù)綁定到該事件上。當(dāng)用戶按下鍵盤上的任意鍵時(shí),handleKeyDown
函數(shù)將被調(diào)用。
$scope.handleKeyDown = function(event) { console.log('Key down event:', event); };
handleKeyDown
函數(shù)接收一個(gè)事件對(duì)象作為參數(shù)。我們可以通過該事件對(duì)象來獲取按下的鍵的信息,例如鍵碼(keyCode
)、鍵的字符表示(key
)等
檢測按鍵事件:可以使用ng-keypress
指令。該指令可以監(jiān)聽指定元素上的按鍵事件,并在按鍵事件發(fā)生時(shí)調(diào)用指定的表達(dá)式
<input type="text" ng-keypress="handleKeyPress($event)">
在一個(gè)文本輸入框上使用了ng-keypress
指令,并將handleKeyPress
函數(shù)綁定到該事件上。當(dāng)用戶按下并且釋放某個(gè)鍵時(shí),handleKeyPress
函數(shù)將被調(diào)用
$scope.handleKeyPress = function(event) { console.log('Key press event:', event); };
與ng-keydown
指令類似,handleKeyPress
函數(shù)也接收一個(gè)事件對(duì)象作為參數(shù),我們可以通過該事件對(duì)象來獲取按下的鍵的信息
區(qū)分按鍵類型:
有時(shí)候,我們可能需要區(qū)分按下的是哪種類型的按鍵,例如字母鍵、數(shù)字鍵、功能鍵等。在AngularJS中,我們可以使用事件對(duì)象的屬性來區(qū)分按鍵類型
event.key
:按下的鍵的字符表示,例如’a’、’0’、’Enter’等。event.keyCode
:按下的鍵的鍵碼表示,對(duì)應(yīng)于鍵盤上每個(gè)鍵的唯一標(biāo)識(shí)。event.shiftKey
:按下了Shift鍵。event.ctrlKey
:按下了Ctrl鍵。event.altKey
:按下了Alt鍵。
通過檢查事件對(duì)象的這些屬性,我們可以根據(jù)需要來區(qū)分按鍵類型
$scope.handleKeyDown = function(event) { if (event.key === 'Enter') { console.log('Enter key pressed'); } else if (event.keyCode >= 48 && event.keyCode <= 57) { console.log('Number key pressed'); } else { console.log('Other key pressed'); } };
們根據(jù)按下的鍵的字符表示和鍵碼表示來區(qū)分按鍵類型。如果按下的是Enter
鍵,則輸出”Enter key pressed”;如果按下的是數(shù)字鍵,則輸出”Number key pressed”;如果按下的是其他鍵,則輸出”Other key pressed”。
總結(jié)
到此這篇關(guān)于前端如何監(jiān)聽手機(jī)鍵盤是否彈起的文章就介紹到這了,更多相關(guān)前端監(jiān)聽手機(jī)鍵盤是否彈起內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Web 開發(fā)中Ajax的Session 超時(shí)處理方法
下面小編就為大家?guī)硪黄猈eb 開發(fā)中Ajax的Session 超時(shí)處理方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-01-01JS日期格式化之javascript Date format
這篇文章主要介紹了JS日期格式化之javascript Date format的相關(guān)資料,需要的朋友可以參考下2015-10-10JS實(shí)現(xiàn)拼音(字母)匹配漢字(姓名)的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何利用JavaScript實(shí)現(xiàn)拼音(字母)匹配(搜索)漢字(姓名)的效果,文中的示例代碼講解詳細(xì),感興趣的可以了解一下2023-04-04javascript AutoScroller 函數(shù)類
javascript AutoScroller 自動(dòng)滾動(dòng)類代碼,學(xué)習(xí)類的朋友可以參考下。2009-05-05JS實(shí)現(xiàn)選擇TextArea內(nèi)文本的方法
這篇文章主要介紹了JS實(shí)現(xiàn)選擇TextArea內(nèi)文本的方法,涉及javascript針對(duì)頁面TextArea元素焦點(diǎn)設(shè)置及文本獲取的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08