最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2021年01月13日 09:28:25   作者:LnEoi  
這篇文章主要介紹了vue如何實現(xiàn)一個獲取按鍵展示快捷鍵效果的Input組件,幫助大家更好的理解和使用vue框架,感興趣的朋友可以了解下

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

效果如下:

關鍵點

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

focus、blur、選中高亮效果

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

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

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

.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);
}

文本提示

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

光標閃動效果

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

@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)等信息,所以做組合按鍵依賴此信息就可以實現(xiàn)。
因為每次按鍵都會觸發(fā)事件,所以要屏蔽掉功能鍵的事件。代碼只實現(xiàn)了一個非功能鍵的組合,需要多功能鍵可以另外建立變量判斷連續(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是另外預設的按鍵code碼集合,方便處理。本來用的是keyCode的,但keyCode已經(jīng)被廢棄了,推薦的是code。
addHotkey就是添加到相應變量的函數(shù),其中主要出判斷一下是否有重復的快捷鍵。
然后預留了一個外部驗證的接口,為了多快捷鍵的時候可以判斷是否有重復。
還有一個max接口,可以限制每個組件的快捷鍵個數(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);
  }

在線預覽

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

以上就是vue實現(xiàn)一個獲取按鍵展示快捷鍵效果的Input組件的詳細內(nèi)容,更多關于vue 展示快捷鍵的資料請關注腳本之家其它相關文章!

相關文章

  • 淺談Vue3中watchEffect的具體用法

    淺談Vue3中watchEffect的具體用法

    watchEffect,它立即執(zhí)行傳入的一個函數(shù),同時響應式追蹤其依賴,并在其依賴變更時重新運行該函數(shù),本文主要介紹了Vue3中watchEffect的具體用法,感興趣的可以了解一下
    2022-05-05
  • vue如何實現(xiàn)對請求參數(shù)進行簽名

    vue如何實現(xiàn)對請求參數(shù)進行簽名

    這篇文章主要介紹了vue如何實現(xiàn)對請求參數(shù)進行簽名問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • vue如何通過image-conversion實現(xiàn)圖片壓縮詳解

    vue如何通過image-conversion實現(xiàn)圖片壓縮詳解

    在Vue項目中上傳大圖片時,可以通過image-conversion庫壓縮至指定大小,這篇文章主要介紹了vue如何通過image-conversion實現(xiàn)圖片壓縮的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-12-12
  • vue響應式系統(tǒng)之observe、watcher、dep的源碼解析

    vue響應式系統(tǒng)之observe、watcher、dep的源碼解析

    這篇文章主要介紹了vue響應式系統(tǒng)之observe、watcher、dep的源碼解析,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-04-04
  • 在 vue-cli v3.0 中使用 SCSS/SASS的方法

    在 vue-cli v3.0 中使用 SCSS/SASS的方法

    關于如何在 vue-cli v3.0 中使用 SCSS/SASS,這里提供三種方案。感興趣的朋友通過本文一起學習吧
    2018-06-06
  • Vue文件如何代替?zhèn)鹘y(tǒng)的HTML文件

    Vue文件如何代替?zhèn)鹘y(tǒng)的HTML文件

    隨著前端工程化的不斷推進,傳統(tǒng)的HTML、CSS、JavaScript三者分離的開發(fā)模式逐漸顯露出一些不足之處,尤其是在構(gòu)建復雜的單頁應用(SPA)時,Vue.js作為一個現(xiàn)代化的前端框架,提供了多種工具和技術來簡化開發(fā)流程,本文將探討.vue文件是如何替代傳統(tǒng)HTML文件的角色
    2024-10-10
  • vue+springboot實現(xiàn)項目的CORS跨域請求

    vue+springboot實現(xiàn)項目的CORS跨域請求

    這篇文章主要介紹了vue+springboot實現(xiàn)項目的CORS跨域請求,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09
  • vue中的keep-alive用法指南

    vue中的keep-alive用法指南

    keep-alive是Vue中的一個內(nèi)置組件,用于緩存非活動組件實例,避免重復渲染,優(yōu)化性能,本文給大家介紹vue中的keep-alive用法指南,感興趣的朋友一起看看吧
    2024-10-10
  • 淺談Vue SSR中的Bundle的具有使用

    淺談Vue SSR中的Bundle的具有使用

    這篇文章主要介紹了淺談Vue SSR中的Bundle的具有使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-11-11
  • vue3+vite項目配置ESlint、pritter插件過程

    vue3+vite項目配置ESlint、pritter插件過程

    這篇文章主要介紹了vue3+vite項目配置ESlint、pritter插件過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08

最新評論

镇赉县| 深泽县| 榆社县| 遵义县| 怀来县| 商河县| 筠连县| 霍邱县| 关岭| 绥德县| 兰州市| 海南省| 开封县| 牙克石市| 高安市| 巴彦县| 慈溪市| 铁岭市| 扎鲁特旗| 武陟县| 民丰县| 大港区| 柘荣县| 大足县| 三穗县| 宜良县| 根河市| 利川市| 安丘市| 松滋市| 昌邑市| 尉犁县| 玉龙| 佛冈县| 财经| 德格县| 西充县| 湘乡市| 永泰县| 左云县| 黄大仙区|