最近开发移动端项目遇到了这么一个需求,就是列表中文本最多三行,超出部分省略,并显示展开收起按钮,若是文本没有超出三行则不显示展开收起按钮,如图: html
刚看到这个需求的时候第一个反应就是,怎么判断文本的高度是否已经超过三行?页面刚加载的时候默认所有显示,判断若是高度超过某一个值就让他隐藏?还没写就以为不靠谱:前端
后来各类审查元素,各类修改html,终于发现了一个好办法,那就是在div 中添加一个span 而后给div设置超出三行省略,这时候就能够获取到文本高度和div高度了,如图: 程序员
其实还有一个小问题,那就是列表中这么多数据,我怎么一个一个的判断呢?其实很是简单,封装成一个组件在组件中的mounted中判断就行了。下面就是我封装的组件代码(复制黏贴改样式就能够用的那种代码)web
<template>
<div class="text-box">
<div :class="['txt', { 'over-hidden': !unfold }]" ref="textBox">
<span ref="spanBox">{{content}}</span>
</div>
<div class="btn" v-if="ifOver" @click="unfold = !unfold">{{unfold ? '收起' : '展开'}}</div>
</div>
</template>
<script>
export default {
name: "text-box",
data() {
return {
ifOver: false, // 文本是否超出三行,默认否
unfold: false // 文本是不是展开状态 默认为收起
};
},
props: {
content: {
type: String,
default: ""
}
},
mounted() {
// 判断是否显示展开收起按钮
this.ifOver = this.$refs.spanBox.offsetHeight > this.$refs.textBox.offsetHeight
}
};
</script>
<style scoped>
.txt {
font-size: 16px;
color: #333;
margin-bottom: 5px;
}
.over-hidden {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 3;
overflow: hidden;
}
.btn {
color: red;
}
</style>
复制代码
这个功能仍是很常见的,可能好多前端程序员也遇到过这类需求,因此想着仍是分享出来。你们若是有更简单或者更好的建议也能够提出来,互相交流学习。^-^bash