使用可编辑的div,contenteditable=“true“属性,自动聚焦

做项目时遇到的需求,需要让文字都竖向排列,且可编辑如下图

 实现编辑时也是竖向的效果,最终效果如下

如果用普通的input写出来,虽然可以通过方法让input竖向排列,但里面的文字是没办法竖向的,input效果如下,

代码如下,v-if和动态样式是业务代码,可忽略

    <div
      ref="editRef"
      v-if="item.isEdit"
      class="edit-div"
      contenteditable="true"
      :style="{ 'letter-spacing': item.fileName.length > 6 ? '2px' : '4px' }"
      v-text="currentFile.fileName"
      @input="inputValueChange"
      @blur="cancelReName"
      @keyup.enter="saveName"
      @keydown="pushKeyDown($event)"
    ></div>

js部分,业务代码不影响

//重命名
function rename() {
  let hasEdit = folderList.value.some((elem) => {
    return elem.isEdit == true;
  });
  if (hasEdit) {
    ElMessage.error('当前有未保存的文件夹');
    return;
  }
  currentFile.value.isEdit = true;
  nextTick(() => {
    proxy.$refs['editRef'][0].focus();
    let range = document.createRange();
    range.selectNodeContents(proxy.$refs['editRef'][0]);
    range.collapse(false);
    let sel = window.getSelection();
    sel.removeAllRanges();
    sel.addRange(range);
  });
}

//回车时阻止默认换行行为

function pushKeyDown(e) {
  if (e.keyCode == 13) {
    e.preventDefault();
  }
}


function inputValueChange() {
  currentFile.value.fileName = proxy.$refs['editRef'][0].innerText.trim();
}


 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值