一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務器之家 - 編程語言 - JavaScript - vue.js - vue實現一個獲取按鍵展示快捷鍵效果的Input組件

vue實現一個獲取按鍵展示快捷鍵效果的Input組件

2021-12-31 16:22LnEoi vue.js

這篇文章主要介紹了vue如何實現一個獲取按鍵展示快捷鍵效果的Input組件,幫助大家更好的理解和使用vue框架,感興趣的朋友可以了解下

遇到一個需求,頁面內要自定義快捷鍵,這就需要可以有地方設置和展示快捷鍵,找了一圈Element UI發現沒有能稍微改改就能用的組件,所以自己動手寫了一個。
這個只有快捷鍵展示功能,快捷鍵實際綁定生效的話是依賴傳回的快捷鍵數據,由另外的組件處理的。目前只測試了Chrome的環境。

效果如下:

vue實現一個獲取按鍵展示快捷鍵效果的Input組件

關鍵點

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

focus、blur、選中高亮效果

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

tabindex屬性規定了Tab按鍵的順序,寫0的話是會按組件默認順序被選中的,如果寫-1則始終無法被選中。因為本身是仿Input組件形式,能被Tab獲取也剛好很合理。

然后加上CSS的獲取焦點的邊框效果、鼠標移動到此顯示文本類型指針

?
1
2
3
4
5
6
7
8
.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);
}

文本提示

當沒有內容時需要跟Input一樣,可以默認顯示文本提示。這也是放一個div在里面,用Vue控制,如果輸出的標簽變量有數據時,就不讓此元素顯示。

光標閃動效果

這個比較好處理,在類Input里面放一個偽元素,當獲取焦點的時候添加此偽元素,然后再給此元素一個CSS3的動畫,就有光標閃動的效果了。

?
1
2
3
4
5
6
7
8
9
10
11
12
@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里會標記是否按下alt、ctrl(control)等信息,所以做組合按鍵依賴此信息就可以實現。
因為每次按鍵都會觸發事件,所以要屏蔽掉功能鍵的事件。代碼只實現了一個非功能鍵的組合,需要多功能鍵可以另外建立變量判斷連續按鍵的情況然后處理。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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是另外預設的按鍵code碼集合,方便處理。本來用的是keyCode的,但keyCode已經被廢棄了,推薦的是code。
addHotkey就是添加到相應變量的函數,其中主要出判斷一下是否有重復的快捷鍵。
然后預留了一個外部驗證的接口,為了多快捷鍵的時候可以判斷是否有重復。
還有一個max接口,可以限制每個組件的快捷鍵個數。

?
1
2
3
4
5
6
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);
}

在線預覽

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

以上就是vue實現一個獲取按鍵展示快捷鍵效果的Input組件的詳細內容,更多關于vue 展示快捷鍵的資料請關注服務器之家其它相關文章!

原文鏈接:https://segmentfault.com/a/1190000038955504

延伸 · 閱讀

精彩推薦
  • vue.js梳理一下vue中的生命周期

    梳理一下vue中的生命周期

    看過很多人講vue的生命周期,但總是被繞的云里霧里,尤其是自學的同學,可能js的基礎也不是太牢固,聽起來更是吃力,那我就已個人之淺見,以大白話...

    CRMEB技術團隊7992021-12-22
  • vue.jsVue項目中實現帶參跳轉功能

    Vue項目中實現帶參跳轉功能

    最近做了一個手機端系統,其中遇到了父頁面需要攜帶參數跳轉至子頁面的問題,現已解決,下面分享一下實現過程,感興趣的朋友一起看看吧...

    YiluRen丶4302022-03-03
  • vue.js詳解vue 表單綁定與組件

    詳解vue 表單綁定與組件

    這篇文章主要介紹了vue 表單綁定與組件的相關資料,幫助大家更好的理解和學習使用vue框架,感興趣的朋友可以了解下...

    Latteitcjz6432022-02-12
  • vue.js用vite搭建vue3應用的實現方法

    用vite搭建vue3應用的實現方法

    這篇文章主要介紹了用vite搭建vue3應用的實現方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下...

    Asiter7912022-01-22
  • vue.jsVue多選列表組件深入詳解

    Vue多選列表組件深入詳解

    這篇文章主要介紹了Vue多選列表組件深入詳解,這個是vue的基本組件,有需要的同學可以研究下...

    yukiwu6752022-01-25
  • vue.jsVue2.x-使用防抖以及節流的示例

    Vue2.x-使用防抖以及節流的示例

    這篇文章主要介紹了Vue2.x-使用防抖以及節流的示例,幫助大家更好的理解和學習使用vue框架,感興趣的朋友可以了解下...

    Kyara6372022-01-25
  • vue.jsVue中引入svg圖標的兩種方式

    Vue中引入svg圖標的兩種方式

    這篇文章主要給大家介紹了關于Vue中引入svg圖標的兩種方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的...

    十里不故夢10222021-12-31
  • vue.jsVue2.x 項目性能優化之代碼優化的實現

    Vue2.x 項目性能優化之代碼優化的實現

    這篇文章主要介紹了Vue2.x 項目性能優化之代碼優化的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋...

    優小U9632022-02-21
主站蜘蛛池模板: 日本成日本片人免费 | 亚洲免费视频在线观看 | 洗濯屋し在线观看 | www.av色| 欧美一区二区三区久久久 | 天天做天天爱天天爽综合区 | 精品一区二区三区高清免费不卡 | 黑人破中国女人处 | chinese一bdsmⅹxx| 小莹的性荡生活45章 | 逼毛片| 日本在线一区 | 四虎影视免费观看 | 厨房play黄瓜进去小说h | 美女脱得一二净无内裤全身的照片 | 草莓视频榴莲视频 | 好湿好紧太硬了我太爽了网站 | 好紧好爽的午夜寂寞视频 | 欧美激情精品久久久久久不卡 | 日本免费精品视频 | 久久婷婷五月综合色精品首页 | 国产精品久久久久久久福利院 | 精品一区二区三区免费站 | 亚洲网红精品大秀在线观看 | 欧美另类老女人 | 91大神亚洲影视在线 | 国产成人www免费人成看片 | 日本人成动漫网站在线观看 | 亚洲一区二区精品视频 | 免费大秀视频在线播放 | 亚洲午夜久久久久影院 | 四虎永久免费地址ww417 | 色中色破解版 | 91婷婷射 | 性奶乳妇 | 日韩精品视频观看 | 日韩精品一区二区三区免费视频 | 男人天堂资源网 | 91免费精品国自产拍在线可以看 | 亚洲高清免费在线观看 | 色久天|