国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

vue實(shí)現(xiàn)一個(gè)獲取按鍵展示快捷鍵效果的Input組件

瀏覽:3日期:2022-10-11 09:42:15

遇到一個(gè)需求,頁(yè)面內(nèi)要自定義快捷鍵,這就需要可以有地方設(shè)置和展示快捷鍵,找了一圈Element UI發(fā)現(xiàn)沒有能稍微改改就能用的組件,所以自己動(dòng)手寫了一個(gè)。這個(gè)只有快捷鍵展示功能,快捷鍵實(shí)際綁定生效的話是依賴傳回的快捷鍵數(shù)據(jù),由另外的組件處理的。目前只測(cè)試了Chrome的環(huán)境。

效果如下:

vue實(shí)現(xiàn)一個(gè)獲取按鍵展示快捷鍵效果的Input組件

關(guān)鍵點(diǎn)

雖然看起來(lái)像是一個(gè)Input但在組件內(nèi)實(shí)際上是展示一個(gè)標(biāo)簽效果,還需要有刪除按鈕。這就得在輸入框內(nèi)放下html代碼,瀏覽器的Input組件顯然不適合,這就只能自己仿一個(gè)類Input組件效果了。

focus、blur、選中高亮效果

非Input這類組件是沒有focus、blur、選中高亮效果這些效果的,還好瀏覽器有預(yù)留實(shí)現(xiàn)方式,網(wǎng)上也早已有網(wǎng)友提供方案,在div里加上tabindex='0'屬性,就能讓div獲得這些效果。

tabindex屬性規(guī)定了Tab按鍵的順序,寫0的話是會(huì)按組件默認(rèn)順序被選中的,如果寫-1則始終無(wú)法被選中。因?yàn)楸旧硎欠翴nput組件形式,能被Tab獲取也剛好很合理。

然后加上CSS的獲取焦點(diǎn)的邊框效果、鼠標(biāo)移動(dòng)到此顯示文本類型指針

.shortcut-key-input { cursor: text; transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);}.shortcut-key-input:focus { border-color: #188cff; box-shadow: 0 0 4px rgba(24, 140, 255, 0.38);}文本提示

當(dāng)沒有內(nèi)容時(shí)需要跟Input一樣,可以默認(rèn)顯示文本提示。這也是放一個(gè)div在里面,用Vue控制,如果輸出的標(biāo)簽變量有數(shù)據(jù)時(shí),就不讓此元素顯示。

光標(biāo)閃動(dòng)效果

這個(gè)比較好處理,在類Input里面放一個(gè)偽元素,當(dāng)獲取焦點(diǎn)的時(shí)候添加此偽元素,然后再給此元素一個(gè)CSS3的動(dòng)畫,就有光標(biāo)閃動(dòng)的效果了。

@keyframes Blink { 0% { opacity: 0; } 100% { opacity: 1; }}.shortcut-key-input.cursor::after { content: '|'; animation: Blink 1.2s ease 0s infinite; font-size: 18px; position: absolute; top: 1px; left: 8px;}按鍵捕獲

按鍵捕獲主要靠keydown事件,其中傳回的event里會(huì)標(biāo)記是否按下alt、ctrl(control)等信息,所以做組合按鍵依賴此信息就可以實(shí)現(xiàn)。因?yàn)槊看伟存I都會(huì)觸發(fā)事件,所以要屏蔽掉功能鍵的事件。代碼只實(shí)現(xiàn)了一個(gè)非功能鍵的組合,需要多功能鍵可以另外建立變量判斷連續(xù)按鍵的情況然后處理。

handleKeydown(e) { const { altKey, ctrlKey, shiftKey, key, code } = e; if (!CODE_CONTROL.includes(key)) { if (!this.keyRange.includes(code)) return; let controlKey = ''; [ { key: altKey, text: 'Alt' }, { key: ctrlKey, text: 'Ctrl' }, { key: shiftKey, text: 'Shift' } ].forEach(curKey => { if (curKey.key) { if (controlKey) controlKey += '+'; controlKey += curKey.text; } }); if (key) { if (controlKey) controlKey += '+'; controlKey += key.toUpperCase(); } this.addHotkey({ text: controlKey, controlKey: { altKey, ctrlKey, shiftKey, key, code } }); } e.preventDefault(); },

CODE_CONTROL是另外預(yù)設(shè)的按鍵code碼集合,方便處理。本來(lái)用的是keyCode的,但keyCode已經(jīng)被廢棄了,推薦的是code。addHotkey就是添加到相應(yīng)變量的函數(shù),其中主要出判斷一下是否有重復(fù)的快捷鍵。然后預(yù)留了一個(gè)外部驗(yàn)證的接口,為了多快捷鍵的時(shí)候可以判斷是否有重復(fù)。還有一個(gè)max接口,可以限制每個(gè)組件的快捷鍵個(gè)數(shù)。

addHotkey(data) { if (this.list.length && this.list.some(item => data.text === item.text)) return; if (this.list.length && this.list.length.toString() === this.max.toString()) return; if (!this.verify(data)) return; this.list.push(data); }在線預(yù)覽

https://codesandbox.io/s/vue-hotkeyinput-90m2k

以上就是vue實(shí)現(xiàn)一個(gè)獲取按鍵展示快捷鍵效果的Input組件的詳細(xì)內(nèi)容,更多關(guān)于vue 展示快捷鍵的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Vue
相關(guān)文章:
主站蜘蛛池模板: 亚洲产国偷v产偷v自拍涩爱 | 91精品国产综合久久久久久 | 午夜成人免费影院 | 欧美 日韩 国产 成人 在线观看 | 欧美一级视 | 亚洲精品高清国产一久久 | 国内精品一区二区在线观看 | 女人张开腿男人猛桶视频 | 精品国产免费第一区二区 | 女黄人东京手机福利视频 | 日本免费a级片 | 日韩在线视频一区二区三区 | 亚洲国产系列久久精品99人人 | 色婷婷久久综合中文久久蜜桃 | 久久合| 亚洲 欧美 91 | 男人透女人超爽视频免费 | 日p免费视频 | 国产日产欧产精品精品推荐在线 | 国产在线视频一区 | 呦女精品视频 | 真人毛片免费全部播放完整 | 亚洲免费视频在线观看 | 欧美精品亚洲精品日韩一区 | 亚洲美女在线播放 | 国产成人在线小视频 | 久久久久一 | 欧美资源在线观看 | 国产高清免费在线 | 精品伊人久久久久网站 | 性成人动作片在线看 | 国产高清在线精品一区 | 国产午夜精品久久久久免费视 | 日韩欧美一区二区不卡看片 | 深夜福利视频大全在线观看 | 三级网站视频在线观看 | 91av福利| 亚洲精品一区二区三区在 | 欧美亚洲日本在线 | 国产在线爱做人成小视频 | www.久久精品 |