vue3中ctrl加回车换行,光标位置设置

<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)
}
posted @ 2024-04-29 18:05  咱也不敢问  阅读(29)  评论(0编辑  收藏  举报