vue3中ctrl加回車換行,游標位置設定

咱也不敢问發表於2024-04-29
<input v-model="text" type="textarea" @click="sbwz" @keydown="keysbwz" @keydown.enter.ctrl.exact.prevent="ctrlEnter" />
// 暫存游標位置,後續擷取換行使用
const textSplit=ref(0)
// 判斷是否改變了上次游標位置
const isTest=ref(true)
// 獲取游標位置
const sbwz=()=>{
isTest.value=true
// 延時獲取滑鼠位置,
setTimeout(()=>{
var textarea: any = document.querySelectorAll(".van-field__control")[0]; // 根據id獲取文字框元素
textSplit.value=textarea.selectionStart;
},10)

}
// 監聽鍵盤按下事件
const keysbwz=(event:any)=>{
switch (event.keyCode) {
case 37: // 左鍵
sbwz()
break;
case 38: // 上鍵
sbwz()
break;
case 39: // 右鍵
sbwz()
break;
case 40: // 下鍵
sbwz()
break;
}
}
// 回車加CTRL鍵 換行
let ctrlEnter = () => {
text.value =text.value.substring(0,textSplit.value)+ '\n'+text.value.substring(textSplit.value);
// 獲取文字框元素
var textarea: any = document.querySelectorAll(".van-field__control")[0]; // 根據id獲取文字框元素
textarea.value = textarea.value.substring(0,textSplit.value)+ '\n'+textarea.value.substring(textSplit.value);
// 判斷是否改變了游標位置,如果改變了則變為false。沒有改變則將當前游標位置加一,方便下次換行使用
if(isTest.value){
isTest.value=false
}else{
textSplit.value= textSplit.value+1
}
textarea.setSelectionRange(textSplit.value+1,textSplit.value+1)
}

相關文章