要求: (顶部广告栏 )
改变swiper组件的固定高度,使之随内部每张图片的高度做自适应
原理:
图片加载完之后,获取图片的原始宽高,根据宽高比,计算出适应后的宽高,如果是适应屏幕宽度的话,就用到 wx.getSystemInfo() 方法设备的信息,并保存到一个数组中,(因为加载的原因不能用push,只能根据索引),切换时监听当前显示的图片,根据其索引找到对应的高度,并赋值给组件即可。
wxml:
<view class='swiper'><swiper indicator-dots="{{indicatorDots}}" vertical="{{vertical}}" autoplay="{{autoplay}}" duration="{{duration}}" interval='{{interval}}' bindchange="bindchange" circular="{{circular}}" style="height:{{imgheights[current]}}rpx;"><block wx:for='{{imgList}}' wx:key="{{index}}"><swiper-item><image src="{{item}}" data-id='{{index}}' class="slide-image" mode="widthFix" bindload="imageLoad"/></swiper-item></block></swiper></view>
wxss:
.swiper image {width: 100%;height: auto; }
js:
data: {//图片地址imgList: ['/images/wyh-img_bg.png', '/images/wyh-img8.png', '/images/wyh-img_shop1.png', '/images/wyh-img_bg1.png'],//是否采用衔接滑动 circular: true,//是否显示画板指示点 indicatorDots: false,//选中点的颜色 indicatorcolor: "#000",//是否竖直 vertical: false,//是否自动切换 autoplay: true,//自动切换的间隔interval: 2500,//滑动动画时长毫秒 duration: 100,//所有图片的高度 imgheights: [],//图片宽度 imgwidth: 750,//默认 current: 0}, imageLoad: function (e) {//获取图片真实宽度 var imgwidth = e.detail.width,imgheight = e.detail.height,//宽高比 ratio = imgwidth / imgheight;console.log(imgwidth, imgheight)//计算的高度值 var viewHeight = 750 / ratio;var imgheight = viewHeight;var imgheights = this.data.imgheights;//把每一张图片的对应的高度记录到数组里 imgheights[e.target.dataset.id] = imgheight;this.setData({imgheights: imgheights})},bindchange: function (e) {// console.log(e.detail.current)this.setData({ current: e.detail.current })},