【微信小程序】利用动态计算元素高度,实现点击展开或收起功能

一、前言
项目详情页主要内容需要实现点击展开或收起功能,由于这些内容是后端返回的数据,字数有长右短,那么就要根据文字填充到元素内后的自适应高度去判断是否显示点击展开功能。
如图所示:点击下拉箭头,展示更多内容。再点击就收起。有一个小bug还未解决:就是下拉箭头的角度改变。下拉后应该变为向上箭头的。。个在这里插入图片描述
wxml:

<!-- 通过事件响应动态改变数值,进而改变view组件的宽高样式。 -->
      <view class="wap-section {{ isFold ? isOpen ? '' : 'fold' : ''}}" >
        <view class="yaowen-sort" wx:for="{{list}}" wx:key="{{index}}">{{item}}</view>
        <van-icon class="down-icon {{isFold ? 'up-icon' :'' }}" name="arrow-up" wx:if="{{isFold}}" bindtap='onChange'/>
      </view>

wxss:

/* 下拉菜单 */
.wap-section{
  padding: 25rpx;
  font-size: 35rpx;
  color:#555;
  background-color: #f8f8f8;
  overflow:hidden;
  height:420rpx;
  transition: all .3s linear;
}
.fold{
  overflow:hidden;
  height:160rpx;
  transition: all .3s linear;
}

.yaowen-sort{
  text-align: left;
  margin:20rpx 25rpx;
  float:left;
}
.up-icon{
  color:#666;
  background-color: #f8f8f8;
  text-align:center;
  transform: rotate(0deg);
}

.down-icon{
  transform:rotate(180deg);
  position: absolute;
  bottom: 0;right:0;
  z-index:999;
  width:126rpx;
  margin-bottom:37rpx;
  margin-right:26rpx;
}

js:

// pages/home/home.js

Page({
  /**
   * 页面的初始数据
   */

  data: {
    // 内容
    list: [
     "新闻","娱乐","体育", "财经","图片", "汽车", "星闻",  "军事","直播", "视频","科技", "手机","数码","本地","网易",  "段子", "时尚", "跟帖", "游戏","教育","课程",  "健康","旅游", "亲子", "艺术","双创", "房产","家居"
    ],
    active: 0,
    // 下拉菜单
    activeNames: ['1'],
    // 声明变量 isOpen 来判断是否展开收起
    isOpen: false,
    // 是否显示'展开' 默认不显示显示 
    isFold: false,
  },

  // 点击展开或收起
  onChange() {
    this.setData({
      isOpen: this.data.isOpen ? false : true
    })
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    let _that = this; // 一定要先存this,避免在回调中设置data时报错
    let query = wx.createSelectorQuery();
    query.select('.wap-section').boundingClientRect();
    query.exec(function (rect) {
      if (rect[0] === null) {
        return
      } else if (rect[0].height > 160) { // 自定义一个边界高度
        _that.setData({
          isFold: true
        })
      }
    })
  },

json: 这里用到了vant组件

{
  "usingComponents": {
    "van-tab": "vant-weapp/tab/index",
    "van-tabs": "vant-weapp/tabs/index",
    "van-collapse": "/vant-weapp/collapse/index",
    "van-collapse-item": "/vant-weapp/collapse-item/index",
    "van-icon": "/vant-weapp/icon/index"
  }
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值