微信小程序-swiper自适应设置高度

需求背景

项目需要做一个swiper切换栏,但是每个swiper-item中有一个类似手风琴风格的收缩栏,展开后其内容不定,高度不定,无法预知,由于微信小程序的swiper组件并不是自适应高度的,所以就需要通过某些方法使其自适应

首先要动态设置swiper高度,就应该先将swiper组件的高度设置为动态值,并根据收缩栏收起时的最小高度初始化为一个默认值

<swiper bindchange="swiperChange" previous-margin="20px" next-margin="10px" style="height: {{ swiperHeight }}rpx"></swiper>
  data: {
    'swiperHeight' : '1240',
        'isToggle' : false ,//收缩栏是否展开控制器
    },

最重要的便是如何获取收缩栏展开后展开部分的高度,并动态设置swiper的高度,这里使用的是微信小程序的节点选择器

      //创建节点选择器,动态获取面板高度设置动画高度
      var query = wx.createSelectorQuery();
      query.select('#收缩栏面板展开部分容器id').boundingClientRect()
      query.exec(function (res) {
      	//res[0].height 为获取的收缩栏面板展开部分的高度
        finalHeight = that.data.swiperHeight + res[0].height ;
        that.setData({
          'isToggle' : !that.data.isToggle ,
          'swiperHeight' : finalHeight
        })
      })

同理当收缩栏收缩时则动态减去展开部分高度

      //创建节点选择器,动态获取面板高度设置动画高度
      var query = wx.createSelectorQuery();
      query.select('#收缩栏面板展开部分容器id').boundingClientRect()
      query.exec(function (res) {
      	//res[0].height 为获取的收缩栏面板展开部分的高度
        finalHeight = that.data.swiperHeight - res[0].height ;
        that.setData({
          'isToggle' : !that.data.isToggle ,
          'swiperHeight' : finalHeight
        })
      })

最终效果

展开状态,不会因为高度不够使下方上课链接等部分无法显示

展开状态

收起状态

收起状态

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
微信小程序的swiper组件默认是根据图片的高度设置swiper的高度的,所以如果要实现swiper高度适应的效果,可以采用以下几种方式: 1. 使用image组件获取图片的高度:在swiper-item中使用image组件来展示图片,并设置mode为aspectFill,然后通过image组件的bindload事件获取到图片加载后的高度,并将该高度动态赋值给swiper组件的高度属性。例如: ```html <swiper style="height:{{swiperHeight}}px;" current="{{current}}"> <block wx:for="{{imageList}}" wx:key="*this"> <swiper-item> <image src="{{item}}" mode="aspectFill" bindload="getImageHeight"></image> </swiper-item> </block> </swiper> ``` ```javascript Page({ data: { swiperHeight: 0, current: 0, imageList: ['image1.png', 'image2.png', 'image3.png'], }, getImageHeight: function(e) { const { index, height } = e.currentTarget.dataset; this.setData({ swiperHeight: height }); } }) ``` 2. 使用wx.createSelectorQuery获取图片高度:在onLoad生命周期函数中使用wx.createSelectorQuery来获取图片的高度,并将该高度动态赋值给swiper组件的高度属性。例如: ```javascript Page({ data: { swiperHeight: 0, current: 0, imageList: ['image1.png', 'image2.png', 'image3.png'], }, onLoad: function() { const query = wx.createSelectorQuery(); query.select('.swiper-item-image').boundingClientRect(res => { this.setData({ swiperHeight: res.height }); }).exec(); } }) ``` ```html <swiper style="height:{{swiperHeight}}px;" current="{{current}}"> <block wx:for="{{imageList}}" wx:key="*this"> <swiper-item> <image class="swiper-item-image" src="{{item}}" mode="aspectFill"></image> </swiper-item> </block> </swiper> ``` 以上两种方式都可以实现swiper高度适应的效果,你可以根据自己的实际需求选择其中一种方法来实现。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值