废话不多说上代码
CollapseText.vue
<template>
<view v-if="descr">
<scroll-view class="collapse-text" :style="{maxHeight: computedMaxHeight}">
<!-- <slot></slot> -->
<rich-text :nodes="descr"></rich-text>
</scroll-view>
<view class="lookcount" @click="handleViewAll">
{{operateText}}
<image v-if="show" src="../../static/sq@2x.png" mode=""></image>
<image v-else src="../../static/zk@2x.png" mode=""></image>
</view>
</view>
</template>
<script>
export default {
name: "CollapseText",
props: {
maxHeight: {
default: 230
},
descr: ''
},
data() {
return {
overflow: false,
show: false,
operateText: '查看全部'
};
},
computed: {
computedMaxHeight() {
return (!this.maxHeight || this.show || !this.overflow) ? null : this.maxHeight + 'rpx'
}
},
mounted() {
const query = uni.createSelectorQuery().in(this);
query.select('.collapse-text').fields({
rect: true,
scrollOffset: true,
size: true
}, data => {
this.overflow = data.height <= data.scrollHeight
}).exec();
},
methods: {
handleViewAll() {
this.show = !this.show
this.operateText = this.show ? '收起' : '查看全部'
}
}
}
</script>
<style>
.collapse-text {
overflow: hidden;
}
.lookcount {
height: 88rpx;
font-size: 24rpx;
color: #646464;
display: flex;
align-items: center;
justify-content: center;
}
.lookcount image {
width: 32rpx;
height: 32rpx;
margin-left: 4rpx;
}
</style>
用法
首先导入
剩下就是直接在用template了
最后样式补上
这里方便复制
.navcount {
width: 686rpx;
font-size: 28rpx;
color: #646464;
line-height: 40rpx;
max-height: 300rpx;
overflow: hidden;
}
大功告成