微信小程序如何实现text显示省略号的同时,实现展开收起功能

场景:文本超长显示省略号后,显示展开收起按钮,文本正常显示时,影藏展开收起按钮

  1. 当文本超长显示省略号后,其文本剩下的高度其实是被影藏了,只有视图内的高度,那这个时候,如何实现既显示省略号的同时,又去动态的控制展开收起按钮呢?
  2. 可以通过嵌套元素,实现text既显示省略号,其高度又是全显示时的高度
  3. 可以通过SelectorQuery选择器,获取text及其父元素的高度,判断text高度是否超过其父元素高度,决定是否显示展开/收起按钮

1. 项目需求图展示:

代码实现

arduino 复制代码
<view>
  // 绑定ID,通过SelectorQuery方法获取当前DOM节点
  // collapse为true时,为展开状态,line-clamp盒子为展开后的DOM,反之相反
  <view id="frame" class="{{collapse?'remark-txt line-clamp':'remark-txt'}}">
    // 这里重点:一定要用text文本,这样才会在显示省略号影藏的同时,获取到真正的总高度
    <text id="textContent">{{rtfMsg}} </text>
  </view>
  // expandStatus展开状态
  <view wx:if="{{expandStatus}}" class="icon-collapse" bindtap="collapseRemark">
    <text>{{collapse?'展开':'收起'}}</text>
      // 展开收起箭头
      <image class="{{collapse?'right-angle collapse':'right-angle'}}" src="../../images/right-angle.png" />
    </view>
  </view>

3.js代码

javascript 复制代码
Page({
  data: {
    rtfMsg:"",
    collapse: true,
    expandStatus: false
  },
  // 点击展开收起按钮切换状态
  collapseRemark() {
    this.setData({
      collapse: !this.data.collapse
    })
  },
  // 重点:需要先set页面文本,否则获取的永远是盒子的高度
  onShow: function () {
    this.setData({
      rtfMsg: '拒绝1、缺少必须要的佐证信息材料材料材料1、缺少必须要的佐证信息材料材料材料1、缺少必须要的佐证信息材料材料材料1、缺少必须要的佐证信息材料材料材料1、缺少必须要的佐证信息材料材料材料1、缺少必须要的佐证信息材料材料材 拒绝1、缺少必须要的佐证信息材料材料材料1、缺少必须要的佐证信息材料材料材料1、缺少必须要的佐证信息材料材料材料1、缺少必须要的佐证信息材料材料材料1、缺少必须要的佐证信息材料材料材料1、缺少必须要的佐证信息材料材料材 '
    })
  },
  // 生命周期函数--监听页面加载
  onLoad: function (options) {
    let expandStatusCopy = false
    // 重新定义this,否则延迟函数里会获取不到当前对象,为underfind
    var that = this
    // setTimeout必须,以防止出现判断时元素尚未渲染出来的情况
    setTimeout(() => {
      var query = this.createSelectorQuery();
      query.select('#frame').boundingClientRect();
      query.select('#textContent').boundingClientRect();
      query.exec(function(res) {
        expandStatusCopy = res[0].height < res[1].height
        that.setData({
          expandStatus: expandStatusCopy
        })
      })
    }, 300)
  },
})

3.样式代码

css 复制代码
.remark-txt{
  min-height: 210rpx;
  line-height: 1.4;
  display: flex;
  width: 620rpx;
  border-radius: 8rpx;
  background-color: #F5F9FF;
  justify-content: start;
  padding: 20rpx 40rpx;
  box-sizing: border-box;
}
.remark-txt.line-clamp{
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 6;
  overflow: hidden;
  padding: 20rpx 40rpx 9rpx 40rpx;
}
.icon-collapse{
  height: 60rpx;
  display: flex;
  align-items: center;
  justify-content: center;
}
.icon-collapse>text{
  margin-right: 20rpx;
  position: relative;
  color: #999;
}
.icon-collapse>image{
  width: 10rpx;
  height: 16rpx;
  transform: rotate(-90deg);
}
.icon-collapse>image.collapse{
  transform: rotate(90deg);
}
image.right-angle{
  width: 14rpx;
}
.collapse{
  transform: rotate(90deg);
}
.right-angle{
  width: 14rpx;
}

END...

相关推荐
胡萝卜术6 小时前
从API调用到手写LRU:力扣146「LRU缓存」的哈希表+双向链表终极进化之路
前端·javascript·面试
科技道人6 小时前
记录 默认置灰/禁用 app ‘Search Engine Selector‘ 的disable按钮
开发语言·前端·javascript
天疆说6 小时前
Zotero Connector 在 Edge 里找不到桌面 Zotero(Linux / Zotero 9.0.6 / Edge 150)
linux·前端·edge
李伟_Li慢慢7 小时前
02-从硬件说起WebGL
前端·three.js
kyriewen8 小时前
看了微软几万人用AI编程的数据——效率涨24%的代价没人提
前端·ai编程·claude
2601_963771378 小时前
How to Scale Your WordPress Store Traffic in 2026
前端·php·plugin
亿元程序员8 小时前
老板说我的3D箭头游戏用来做试玩太普通了,没人想玩,让我变点花样...
前端
李伟_Li慢慢9 小时前
01-threejs架构原理-课程简介
前端·three.js
_瑞10 小时前
深入理解 iOS 渲染原理
前端·ios
IT_陈寒10 小时前
SpringBoot自动配置失灵?你可能忘了这个关键注解
前端·人工智能·后端