【春哥博客技术教程分享】在开发微信小程序的过程中,经常会需要各种方便一点的功能,春哥团队技术大东在操作过程中就经常遇到,比如:有时候文本需要实现这样的功能:
1、文本超过n行显示省略号;
2、省略时,显示 展开/收起 按钮;
3、文本不超过n行时,不显示省略号和展开/收起按钮。

实现思路
文本过长显示省略号、展开和收起功能,通过css样式即可实现
判断是否显示展开/收起按钮:
通过嵌套元素,可以实现text既显示省略号,其高度又是全显示时的高度
通过SelectorQuery选择器,获取text及其父元素的高度,判断text高度是否超过其父元素高度,决定是否显示展开/收起按钮即可
代码
wxss
.frame {width: 100%;max-height: 206rpx;text-align: left;display: -webkit-box;overflow: hidden;text-overflow: ellipsis;word-wrap: break-word;white-space: normal !important;-webkit-line-clamp: 3;-webkit-box-orient: vertical;}.nofold {display: block;text-overflow: unset;-webkit-line-clamp: unset;max-height: unset;}
frame样式设置最大高度,超过3行后出现省略号。overflow为hidden,使得text的超出父元素部分隐藏掉。nofold样式则将最大高度、出现省略号的行数去除,以展示全文。
wxml
<view id="frame" class='frame {{fold == false ? "nofold":""}}'><text id="content">{{detail}}</text></view>
wxml中,在view元素中嵌套text元素。样式写在view中,text不加任何样式(重要)。分别写上id,方便js代码获取其尺寸信息。
javascript
var query = this.createSelectorQuery();query.select('#content').boundingClientRect();query.select('#frame').boundingClientRect();query.exec(function(res) {if (res[0] && res[0].height) {if (res[0].height > res[1].height) {self.setData({fold: true,});} else {self.setData({fold: null,});}}})
js代码中,通过选择器获取两者的高度,如果text高度高于view,则说明有省略文本,显示展开/收起按钮。
js的选择器如果是写在onshow/onload方法中,最好加上延迟,以防止出现判断时元素尚未渲染出来的情况。
今天就和大家分享到这里,如果有更多关于小程序开发的问题欢迎到春哥技术源码论坛区留言、探讨。