欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue3通過組合鍵實現(xiàn)換行操作的示例詳解

 更新時間:2024年03月01日 11:18:42   作者:趙小川  
這篇文章主要為大家詳細介紹了vue3如何通過組合鍵,例如command+Enter、shift+Enter、alt + Enter,實現(xiàn)換行操作,感興趣的可以了解下

需求背景

有一個聊天室功能,采用輸入框的形式,輸入完畢使用Enter,可以直接進行發(fā)送。使用一些組合鍵 比如 command+Enter / shift+Enter / alt + Enter ... 可以實現(xiàn)換行操作。但現(xiàn)實的情況是,原生 Enter 天然支持換行,但是我們需要阻止掉。但是組合鍵又需要自己去實現(xiàn)換行

效果圖

原生使用Enter 換行

實現(xiàn)自定義組合鍵換行效果圖

實現(xiàn)過程分析

  • 根據(jù)需求定義組合鍵 Map
  • 換行是根據(jù)光標位置進行換行,所以首先要獲取到光標的位置
  • 根據(jù)光標的位置,拆分成兩段文本
  • 合并兩端文本為帶有換行符的新文本
  • 重新設置光標位置

代碼實現(xiàn)

template模版

<el-input
        ref="editorRef"
        v-model="valueHtml"
        type="textarea"
        :rows="4"
        placeholder="請輸入內容"
        @keydown="handleKeyDown"
      >
      </el-input>

js邏輯

import { ref, nextTick } from 'vue'
const currentEvent = ref()
const valueHtml = ref('')
const editorRef = ref()

const handleKeyDown = ($event: Event) => {
  const event = $event as KeyboardEvent
  currentEvent.value = event.target as HTMLInputElement
  // 定義組合鍵 Map
  const shortCutKeys: (keyof KeyboardEvent)[] = ['metaKey', 'altKey', 'ctrlKey', 'shiftKey']
  const isEnterKey = event.key === 'Enter'
  const isShortcutKeys = shortCutKeys.some((item) => event[item])
  if (isEnterKey && isShortcutKeys) {
    // 獲取光標位置
    const cursorPosition = currentEvent.value.selectionStart

    // 拆分成兩段文本
    const textBeforeCursor = valueHtml.value.slice(0, cursorPosition)
    const textAfterCursor = valueHtml.value.slice(cursorPosition)

    // 合并為帶有換行符的新文本
    const newText = textBeforeCursor + '\n' + textAfterCursor

    // 更新輸入框的值
    valueHtml.value = newText
    // 文本編輯器的高度發(fā)生變化后
    nextTick(() => {
      // 高度變化 自動滾動到底部
      const editor = editorRef.value.textarea
      editorRef.value.textarea.scrollTop = editor.scrollHeight
      // 設置光標位置為: start 和 end 相同,光標會移動到換行符后面的新行首
      currentEvent.value.setSelectionRange(cursorPosition + 1, cursorPosition + 1)
    })
  } else if (event.key === 'Enter') {
    // 阻止掉 Enter 的默認換行行為
    event.preventDefault()
    // do yourself things for example  send
  }
}

細節(jié)優(yōu)化

組合鍵實現(xiàn)了換行,但是按下Enter 也會觸發(fā)換行,要阻止掉他的默認行為

else if (event.key === 'Enter') {
    // 阻止掉 Enter 的默認換行行為
    event.preventDefault()
}

文本內容換行后,高度有限,需要自動滾動到最下面,保證內容始終可見

const editor = editorRef.value.textarea
editorRef.value.textarea.scrollTop = editor.scrollHeight

到此這篇關于vue3通過組合鍵實現(xiàn)換行操作的示例詳解的文章就介紹到這了,更多相關vue3換行內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • vue slot 在子組件中顯示父組件傳遞的模板

    vue slot 在子組件中顯示父組件傳遞的模板

    這篇文章主要介紹了vue slot 在子組件中顯示父組件傳遞的模板,需要的朋友可以參考下
    2018-03-03
  • vue中使用v-if,v-else來設置css樣式的步驟

    vue中使用v-if,v-else來設置css樣式的步驟

    我們在使用vue項目開發(fā)時,v-if是使用的非常多的,在這里我們談談如何使用v-i來綁定修改css樣式,使用的主要是雙向數(shù)據(jù)綁定,即通過改變他的狀態(tài)來改變他的樣式,這篇文章主要介紹了vue中如何使用v-if,v-else來設置css樣式,需要的朋友可以參考下
    2023-03-03
  • Vue infinite update loop的問題解決

    Vue infinite update loop的問題解決

    這篇文章主要介紹了Vue "...infinite update loop..."的問題解決,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-04-04
  • vue前端開發(fā)輔助函數(shù)狀態(tài)管理詳解示例

    vue前端開發(fā)輔助函數(shù)狀態(tài)管理詳解示例

    vue的應用狀態(tài)管理提供了mapState、mapGetters、mapMutations、mapActions四個輔助函數(shù),所謂的輔助函數(shù)分別對State、Getters、Mutations、Actions在完成狀態(tài)的使用進行簡化
    2021-10-10
  • 關于dev-tool安裝方法(手動安裝版)

    關于dev-tool安裝方法(手動安裝版)

    這篇文章主要介紹了關于dev-tool安裝方法(手動安裝版),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • vue實現(xiàn)簡易的計算器功能

    vue實現(xiàn)簡易的計算器功能

    這篇文章主要為大家詳細介紹了vue實現(xiàn)簡易的計算器功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Vue3中Transition和TransitionGroup組件的使用及說明

    Vue3中Transition和TransitionGroup組件的使用及說明

    本文將深入探討這兩個組件的作用,以及如何在實際項目中靈活運用它們,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • Vue?3.0?項目創(chuàng)建過程及解決方案

    Vue?3.0?項目創(chuàng)建過程及解決方案

    這篇文章主要介紹了Vue?3.0?項目創(chuàng)建過程,首先要確保電腦上已安裝node.js,確保已安裝?Vue?CLI,本文結合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2024-04-04
  • vue 動態(tài)綁定背景圖片的方法

    vue 動態(tài)綁定背景圖片的方法

    這篇文章主要介紹了vue 動態(tài)綁定背景圖片的方法,在文末給大家介紹了vue如何給v-for循環(huán)的標簽添加背景圖片,需要的朋友參考下吧
    2018-08-08
  • vue2.0 elementUI制作面包屑導航欄

    vue2.0 elementUI制作面包屑導航欄

    本篇文章主要給大家詳細代碼講解了vue2.0 elementUI制作面包屑導航欄的過程,對此有興趣的朋友可以學習下。
    2018-02-02

最新評論