解决小程序swiper高度无法自适应

一、思路:动态获取swiper子元素高度、将获取的子元素高度赋值给swiper。
二、实现:
1、设置统一方法设置swiper 高度:

// 获取swiper高度
const getSwiperHeight = (p, element) => {
  console.log('p----------');
  console.log(p,element);
  //创建节点选择器
  let query = wx.createSelectorQuery();
  //选择id
  let that = p;
  query.select(element).boundingClientRect(
    function (e) {
      console.log(e);
      that.setData({
        swiperHeight: e.height+20+ 'px'
      })
    }).exec();
}

2、swiper内容:

<swiper style="height: {{swiperHeight}}" duration="{{duration}}" current="{{currentTab}}" bindchange="swiperChange">
    <block wx:for="{{tabList}}" wx:key="index">
      <swiper-item>
        //内容区域设置动态类、便于获取内容高度
        <view class="swiper-item{{index}}">
          <block wx:if="{{currentList.length > 0}}" wx:key="index">
            <block wx:for="{{currentList}}" wx:key='index'>
              <view class="record-wrap" bindtap="waitGoCode" data-item='{{item}}'>
                <view class="card-wrap record-item border-radius10">
                  <view class="{{'color'+item.payment_type.index}}">
                    <text>{{item.payment_type.name1}}</text>
                    <text>{{item.payment_type.name2}}</text>
                  </view>
                  <view class="record-item-info">
                    <view>
                      <text class="textWeight">收款金额:</text>
                      <text class="textRed">{{item.market_price}}</text>
                    </view>
                    <view>
                      <text class="textWeight">客户姓名:</text>
                      <text>{{item.user ? item.user.chinese_name : '无'}}</text>
                    </view>
                  </view>
                </view>
              </view>
            </block>
            <ReachBottomTip></ReachBottomTip>
          </block>
          <block wx:if="{{currentList.length == 0}}" wx:key="index">
            <EmptyTip></EmptyTip>
          </block>
        </view>
      </swiper-item>
    </block>

3、每次获取最新数据时调通用函数设置swiper高度:
例:

 onLoad: async function (options) {
    await this.getPaymentTotal()
    await this.getPaymentRecord()
    //等获取完数据、再设置高度!!!
    // 动态设置swiper高度
    getSwiperHeight(this,'.swiper-item'+this.data.currentTab)
  },
  所以每次保障获取完数据后再调用赋值swiper高度的方法!

4、坑

 /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },
  最好不要在这个函数中设置高度、异步加载数据、子内容高度还没有完全形成、在readey中已经获取节点元素高度可能不准确!
  所以每次保障获取完数据后再调用赋值swiper高度的方法!
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值