写一个vue组件,如果文本超过指定高度可以配置展示一行或多行,鼠标hover有el-tootips,如果不超过不展示el-tootips
时间: 2024-03-10 20:47:21 浏览: 79
好的,我可以给你提供一个简单的 Vue 组件代码示例:
```vue
<template>
<div class="text-container" :style="styleObject">
<div class="text" ref="text">{{ text }}</div>
<el-tooltip v-if="showTooltip" content="{{ text }}" placement="top">
<div class="text">{{ text }}</div>
</el-tooltip>
</div>
</template>
<script>
export default {
name: "EllipsisText",
props: {
text: {
type: String,
required: true,
},
lineClamp: {
type: Number,
default: 1,
},
},
data() {
return {
showTooltip: false,
};
},
computed: {
styleObject() {
const lineHeight = parseInt(getComputedStyle(this.$refs.text).lineHeight);
const height = lineHeight * this.lineClamp;
return {
height: `${height}px`,
overflow: "hidden",
textOverflow: "ellipsis",
display: "-webkit-box",
"-webkit-box-orient": "vertical",
"-webkit-line-clamp": this.lineClamp,
};
},
},
mounted() {
this.showTooltip = this.$refs.text.scrollWidth > this.$refs.text.clientWidth;
},
};
</script>
<style scoped>
.text-container {
position: relative;
}
.text {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
</style>
```
这个组件接收两个 props:`text` 和 `lineClamp`,分别表示要展示的文本和最多显示的行数。如果实际文本超过了指定行数,就会截断并在末尾显示省略号,同时鼠标悬停时会显示完整文本的 tooltip。如果实际文本不超过指定行数,就不会显示 tooltip。
你可以在父组件中像下面这样使用:
```vue
<template>
<div>
<ellipsis-text :text="text" :line-clamp="1" />
</div>
</template>
<script>
import EllipsisText from "./EllipsisText.vue";
export default {
components: {
EllipsisText,
},
data() {
return {
text: "这是一段很长的文本,可能会超过一行或两行甚至更多。",
};
},
};
</script>
```
这个例子中,`lineClamp` 设置为 1,表示最多显示一行文本。如果实际文本超过一行,就会截断并显示 tooltip;如果不超过一行,就不会显示 tooltip。
阅读全文