小程序多个swiper高度自适应

博客讲述了在小程序中遇到的swiper高度自适应问题。原有的固定高度方案因新增需求变得不可行,现在通过计算每个swiper内卡片的实际高度,动态设置swiper高度,实现每个swiper根据内容自适应。

    之前做个一个多个tab的列表页,每个tab下的内容对应的就是swiper,而小程序的swiper的高度默认是150px,不能自适应内容高度,最开始我们的列表内容每个卡片的高度都是差不多的,当时做的是把每个卡片高度固定400px,然后用固定的高度*每个tab下卡片的数量来得到每个swiper的高度,具体博客链接:https://blog.youkuaiyun.com/this_ITBoy/article/details/103869457。但是,后来出了新的需求,如图:

可以看到,第一个卡片加入了物流的信息,而第二个卡片没有物流信息,这样的话,高度肯定不能固定成一样的了,所以需要分别计算出每个tab下的swiper里面的每个卡片的高度然后乘以卡片数量,才能动态得到每个swiper的高度。改动的代码如下:

1、data里面添加一个orderListHeight对象:

  data: {
    ...以前的数据不变,
    orderListHeight:{}//每个swiper的对应高度存放对象
  },

2、请求列表数据的时候,每次加载不同的tab展示出不同的swiper,需要计算不同的高度,并保存到data的orderListHeight对象中:

 //请求列表
  getOrderList: function(cid) {
      var self = this;
      this.setData({
        curListId: cid,
        loadFlag:true
  
在支付宝小程序中实现 `swiper-item` 的高度自适应,需要结合动态计算和组件嵌套的策略。由于小程序中的 `swiper` 组件默认高度为固定值,无法自动适配内容高度,因此需通过以下方式实现高度自适应。 ### 使用 `scroll-view` 嵌套实现高度自适应 可以在每个 `swiper-item` 中嵌套一个 `scroll-view`,并设置其纵向滚动属性 `scroll-y="true"`,从而允许内容超出时进行滚动显示。同时,可以通过数据绑定的方式将高度传递给 `scroll-view`,以实现动态的高度调整。 ```html <swiper class="swiper" indicator-dots="{{false}}"> <block a:for="{{items}}" a:key="index"> <swiper-item> <scroll-view scroll-y="{{true}}" style="height: {{clientHeight ? clientHeight + 'px' : 'auto'}}" bindscrolltolower="scrollbot"> <!-- 内容区域 --> </scroll-view> </swiper-item> </block> </swiper> ``` 该方法可以有效解决因内容高度不一致而导致的布局问题,适用于卡片式内容展示场景[^1]。 ### 动态获取内容高度并赋值给 `swiper` 另一种实现方式是通过创建节点选择器来获取每个 `swiper-item` 中内容的实际高度,并将该高度赋值给 `swiper` 组件的样式属性。 具体实现步骤如下: - 在页面 JS 中定义一个方法用于获取元素高度: ```javascript const getSwiperHeight = (page, element) => { const query = my.createSelectorQuery(); let that = page; query.select(element).boundingClientRect(function(res) { if (res) { that.setData({ swiperHeight: res.height + 20 + 'px' }); } }).exec(); } ``` - 在 WXML 中使用该高度作为 `swiper` 的样式: ```html <swiper class="swiper" style="height:{{swiperHeight}}"> <swiper-item> <view id="content-1">内容1</view> </swiper-item> <swiper-item> <view id="content-2">内容2</view> </swiper-item> </swiper> ``` 此方法适用于内容高度差异较大且需要精确控制 `swiper` 高度的场景[^4]。 ### 多个 Tab 下的 Swiper 高度适配 对于多个 Tab 切换下的 `swiper` 场景,若每个 Tab 对应的内容高度不同,可采用统一方法设置 `swiper` 高度。例如,可以预先设定一个基础高度,再根据实际内容动态调整。 ```html <swiper class="swiper" style="height:{{tabHeights[currentTab]}}"> <swiper-item> <!-- Tab1内容 --> </swiper-item> <swiper-item> <!-- Tab2内容 --> </swiper-item> </swiper> ``` 其中 `tabHeights` 是一个数组,存储了每个 Tab 对应的高度值。这种方式适合 Tab 内容结构相对固定的项目[^3]。 ### 结合嵌套 `scroll-view` 实现复杂内容滚动 如果 `swiper-item` 内部还包含需要垂直滚动的内容,可以在 `scroll-view` 内部继续嵌套另一个 `scroll-view`,并设置其 `scroll-y="true"` 属性。 ```html <swiper class="swiper"> <swiper-item> <scroll-view scroll-y="true" class="scroll"> <!-- 可滚动内容 --> </scroll-view> </swiper-item> </swiper> ``` 这种嵌套结构可以满足更复杂的交互需求,如长列表或图文混排内容的展示[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值