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>
目录
相关文章
|
8月前
|
JavaScript
vue element plus Checkbox 多选框
vue element plus Checkbox 多选框
346 0
|
前端开发
CSS div隐藏滚动条
CSS div隐藏滚动条
81 0
|
5月前
|
JavaScript
Vue2面包屑(Breadcrumb)
这篇文章介绍了如何在Vue 3框架中创建一个面包屑(Breadcrumb)组件,支持自定义路由数组、面包屑高度和分隔符。
123 1
Vue2面包屑(Breadcrumb)
|
5月前
Vue3文本域(Textarea)
这是一个基于 Vue3 的可自定义文本域组件 (`Textarea`),具备多种实用功能,如自适应内容高度、清除图标、字数统计及禁用状态等。
217 2
Vue3文本域(Textarea)
|
5月前
Vue3多选框(Checkbox)
这是一个可高度定制的多选框组件,支持多种属性设置,如复选元素数据、是否禁用、垂直排列、当前选中值、间距、展示区域宽高及全选样式控制等。提供了在线预览和示例代码,便于快速集成与自定义。
170 1
Vue3多选框(Checkbox)
|
5月前
Vue3面包屑(Breadcrumb)
该Breadcrumb组件允许自定义设置多个属性,包括路由数组、面包屑类名和样式、文本最大显示宽度、分隔符及样式、以及目标URL的打开方式。通过这些配置项,可以轻松实现不同样式的面包屑导航。组件支持点击跳转,并且能够处理带查询参数的路径。在线预览展示了其丰富的定制功能。可通过引入并在页面中使用该组件来快速构建导航结构。
151 1
Vue3面包屑(Breadcrumb)
|
6月前
|
前端开发
css 实用技巧 —— div在div中水平垂直居中(两种方法)
css 实用技巧 —— div在div中水平垂直居中(两种方法)
283 3
|
8月前
|
JavaScript
vue element plus Radio 单选框
vue element plus Radio 单选框
197 0
|
8月前
|
JavaScript 前端开发
原生js与jQuery显示隐藏div的几种方法
原生js与jQuery显示隐藏div的几种方法
116 0
|
前端开发
你对layui的弹出层表单进行表单验证了解多少呢?
我们在项目中使用**layui**做前端的时候,就少不了表单**form**,但也有时候我们会使用**layui**的弹出层`layer.open`,来做一个弹出层表单,该弹出层有自己的**btn**(确定,取消按钮等等),那么如何对弹出层的表单做一个表单验证呢?
703 1
你对layui的弹出层表单进行表单验证了解多少呢?