使用场景:文本溢出时需要对文本进行处理;相对于一定高度的容器,溢出容器部分的文本显示省略号,同时,鼠标移入通过显示tooltip来显示文本的具体内容
组件的二次封装
<template>
<!-- :disabled="disabledTip" -->
<el-tooltip
ref="tlp"
:content="text"
effect="dark"
:disabled="!tooltipFlag"
:placement="placement"
class="tooltip"
>
<span :class="className" @mouseenter="visibilityChange($event)">{{ text }}</span>
</el-tooltip>
</template>
<script>
export default {
name: 'EllipsisTooltip',
props: {
text: { type: String, default: '' }, // 字符内容
placement: { type: String, default: 'top-start' },
className: { type: String, default: 'text' } // class
},
data() {
return {
disabledTip: false,
tooltipFlag: false
}
},
methods: {
// tooltip的可控
visibilityChange(event) {
const ev = event.target
const ev_height = ev.offsetHeight // 文本的实际高度
const content_height = this.$refs.tlp.$el.parentNode.clientHeight // 文本容器高度
console.log('content_height', content_height, 'ev_height', ev_height)
console.log(content_height > ev_height)
if (content_height < ev_height) {
// 实际内容高度 > 文本高度 =》内容溢出
this.tooltipFlag = true // NameIsIncludeWord ? true : !!false
} else {
// 否则为不溢出
this.tooltipFlag = false
}
console.log('flag:', this.tooltipFlag)
}
}
}
</script>
组件的使用
// html
<div class="tooltip-wrap">
<ellipsis-tooltip
:text="templateDetail.type"
></ellipsis-tooltip>
</div>
// css
.tooltip-wrap {
width: 200px;
height: 40px; // 必须要有高度设置,因为tooltip的显示条件是通过高度来判断的
display: inline-block;
display: -webkit-box;
-webkit-line-clamp: 1; // 因为通过高度所以只显示一行,溢出显示省略号
-webkit-box-orient: vertical;
overflow: hidden;
text-overflow: ellipsis;
}