div contenteditable自定义组件

简介: div contenteditable自定义组件
<template>
  <div class="edit-border" @blur="divBlur" @input="divInput" :contenteditable="!disabled" ref="ableRef"></div>
</template>
<script setup>
import { ref, onMounted, nextTick } from 'vue'
/*
    <input-textarea
        v-model:inputValue="value"
        disabled
        maxlength="3000"
        @divInput="divInput"
        @divBlur="divInput"
    >
    </input-textarea>
*/
const props = defineProps({
  inputValue: { type: [Number, String], default: '' },
  disabled: { type: Boolean, default: false },
  maxlength: { type: [Number, String], default: 3000 }
})
const emits = defineEmits(['update:inputValue', 'divBlur', 'divInput'])
const ableRef = ref(null)
function divInput() {
  // 限制输入字数
  if (ableRef.value.innerText.length > props.maxlength) {
    ableRef.value.innerText = ableRef.value.innerText.slice(0, props.maxlength)
    // 调整光标
    ableRef.value.focus()
    document.execCommand('selectAll', false, null)
    document.getSelection().collapseToEnd()
  }
  emits('update:inputValue', ableRef.value.innerText)
  emits('divInput', ableRef.value.innerText)
}
function divBlur() {
  emits('divBlur', ableRef.value.innerText)
}
onMounted(() => {
  nextTick(() => {
    ableRef.value.innerText = props.inputValue
  })
})
</script>
<style lang="scss" scoped>
.edit-border {
  cursor: pointer;
  border: 1px solid #eee;
  padding: 5px;
  border-radius: 4px;
  margin: 10px;
  text-align: left;
}
</style>
目录
相关文章
|
存储 SQL druid
什么是Druid
什么是Druid
5139 1
什么是Druid
|
2月前
|
监控 数据可视化 安全
从零开始学 Dify:搭建你的第一个 LLM 应用平台
Dify(Do It For You)是一个开源的 LLMOps 平台,专注于缩短 AI 原型与生产应用之间的距离。它通过「可视化 + API 优先」的方式,帮助开发者快速构建、测试、监控并上线基于大型语言模型(LLM)的解决方案,支持从聊天机器人、检索增强生成(RAG),再到代理 Agent 的全功能覆盖。
|
12月前
|
前端开发 JavaScript
前端基础(十三)_定时器(间歇定时器、延迟定时器)
本文介绍了JavaScript中定时器的使用,包括`setTimeout`和`setInterval`两种类型。`setTimeout`是实现延迟执行,即等待一定时间后执行一次指定的函数;而`setInterval`是实现间歇执行,即每隔一定时间就执行一次指定的函数。文章还介绍了如何使用`clearTimeout`和`clearInterval`来取消定时器的执行,并通过示例代码展示了定时器的创建和取消。
468 4
前端基础(十三)_定时器(间歇定时器、延迟定时器)
|
11月前
|
JSON JavaScript 前端开发
js如何格式化一个JSON对象?
js如何格式化一个JSON对象?
356 3
|
11月前
ThreeJs添加拖动辅助线
这篇文章介绍了在Three.js中使用TransformControls组件来添加拖动辅助线,实现对3D模型在不同轴向上进行直观的拖动和平移操作。
352 0
|
9月前
|
Web App开发 移动开发 HTML5
html5 + Three.js 3D风雪封印在棱镜中的梅花鹿动效源码
html5 + Three.js 3D风雪封印在棱镜中的梅花鹿动效源码。画面中心是悬浮于空的梅花鹿,其四周由白色线段组成了一个6边形将中心的梅花鹿包裹其中。四周漂浮的白雪随着多边形的转动而同步旋转。建议使用支持HTML5与css3效果较好的火狐(Firefox)或谷歌(Chrome)等浏览器预览本源码。
192 2
|
11月前
|
存储 JavaScript 安全
vue项目打包优化:缩小体积productionSourceMap设置,使用cdn加速
vue项目打包优化:缩小体积productionSourceMap设置,使用cdn加速
1127 0
|
算法 前端开发 Java
探讨Java中递归构建树形结构的算法
探讨Java中递归构建树形结构的算法
268 1
|
前端开发
大屏自适应/适配方案【详解】(echarts自适配、rem、flexible.js、vscode中px2rem插件自动计算rem)
大屏自适应/适配方案【详解】(echarts自适配、rem、flexible.js、vscode中px2rem插件自动计算rem)
1300 0