需求是实现el-input固定:rows=5,在正常内容超长的情况下显示省略号,并且鼠标放在上面是显示tooltip,点击获取到焦点时显示完整内容。
以下是具体实现方式:
(1)el-input外边套一个el-tooltip
(2)内容通过css控制超长显示省略号,失去焦点时使css生效,获取到焦点时使css失效显示完整内容。
html代码:
<el-form-item label="备注:" prop="feeDetremarks">
<el-tooltip
class="box-item"
effect="dark"
placement="top-start"
:disabled="feeDetremarksInputClass">
<template #content>
<div style="width: 100%">{{ basicInfoFormModel.feeDetremarks }}</div>
</template>
<el-input
v-model="basicInfoFormModel.feeDetremarks"
:readonly="basicInfoFormModel.currentApprovalNode != '00'"
type="textarea"
resize="none"
:rows="5"
@focus="feeDetremarksInputGetFocusMethod"
@blur="feeDetremarksInputGetBlurMethod"
ref="feeDetremarksRef"
id="feeDetremarkstextareaid"
:class="
feeDetremarksInputClass ? '' : 'input-content-break-class'
"></el-input>
</el-tooltip>
</el-form-item>
(3) 并且失去焦点的时候记录下输入框内滚动的距离,在失去焦点时才能回到顶端,并且使css生效.
ts代码:
/**
* 备注输入框获取到焦点时触发该方法
*/
const feeDetremarksInputGetFocusMethod = () => {
feeDetremarksInputClass.value = true;
if (feeDetremarksRef.value) {
scrollVal.value = feeDetremarksRef.value.ownerDocument.body.scrollTop;
}
};
/**
* 备注输入框获取到焦点时触发该方法
*/
const feeDetremarksInputGetBlurMethod = () => {
feeDetremarksInputClass.value = false;
if (typeof scrollVal.value === "number") {
window.scroll(0, scrollVal.value);
}
nextTick(() => {
setTimeout(() => {
const textarea = document.getElementById("feeDetremarkstextareaid");
textarea?.scroll(0, scrollVal.value);
}, 13);
});
};
(4)记得css代码需要使用穿透
css代码:
.input-content-break-class {
:deep(.el-textarea__inner) {
width: 100%;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 5;
-webkit-box-orient: vertical;
}
}
以上是相关代码,没写详细请随便问!