获取内容高度,修改swiper高度
wx.createSelectorQuery().select(`#${containerId}`).boundingClientRect(rect => { this.setData({ swiperHeight: rect.height + 'px' });}).exec();
这是一种常用的方法,但是如果内容是远程加载的,那么这个方法起先放在onLoad里面会无法拿到内容改变后的高度。这个时候搜索到网上的一些建议是可以预估每个的高度,然后乘以数量,计算出高度。或者有的情况是内容包裹在一个完整闭合的组件里面,组件内部事件本身就会改变内容高度,就更加无法通过事件执行高度计算了。
这里提供一个更加稳妥的方法,可以使用页面滚动事件 onPageScroll 监听滚动条变化,只要滑动页面,就重新计算内容高度(内容如果元素过多,那么记得外边包裹一个元素,直接拾取container元素高度就可以了),这时候只要将预设高度设置为屏幕高度(height: 100vh),滑动页面就会重新计算真实内容高度,效果丝滑
setSwiperHeight() { wx.createSelectorQuery().select(`#${containerId}`).boundingClientRect(rect => { this.setData({ swiperHeight: rect.height + 'px' }); }).exec();},
还有一个方法:
固定swiper高度,使其撑满整个页面剩余部分,设置
swiper-item{ overflow-y:scroll }
当然我这个方法的前提是,swiper在页面的最下面,所以无论是swiper-item完全展示,然后继续滚动,还是swiper-item固定高度,内部滚动,用户是感知不到的。