咱们都知道微信小程序的组件image是用来显示图片的,它有一下几个属性:
一、src 图片资源地址
二、mode 图片裁剪、缩放的模式
三、binderror 当错误发生时,发布到 AppService 的事件名,事件对象event.detail = {errMsg: ‘something wrong’}
四、bindload 当图片载入完毕时,发布到 AppService 的事件名,事件对象event.detail = {height:’图片高度px’, width:’图片宽度px’}
可是image有默认的固定的宽度和高度,这样咱们在作图片自适应的时候,就很差作了,特别是咱们在作一些商品详情页的时候,须要image自适应屏幕,按原图比例显示。那么如何让image自适应比例显示呢?能够有两种方法:html
1、使用mode:widthFix
widthFix:宽度不变,高度自动变化,保持原图宽高比不变。
首先咱们先设置image的mode为widthFix,而后给图片加一个固定rpx的宽度,好比:730rpx。
这样图片也能够自适应了。。由于小程序的rpx自己就是一个自适应显示的单位
2、使用bindload绑定函数动态自适应。
咱们能够给image绑定一个函数,这个函数,如上面的bindload说明同样,咱们能够获取到原图的宽度和高度。
而后计算他们的宽高比率。。而后设置一个宽度大小(rpx),最后经过style动态设置image的宽高。代码以下:小程序
html代码:微信小程序
<image src="{{ item }}" bindload="imageLoad" data-index="{{ index }}" style="width:{{ images[index].width }}rpx; height:{{ images[index].height }}rpx;"></image>
js代码:微信
Page({ data: { images:{} }, imageLoad: function(e) { var $width=e.detail.width, //获取图片真实宽度 $height=e.detail.height, ratio=$width/$height; //图片的真实宽高比例 var viewWidth=718, //设置图片显示宽度,左右留有16rpx边距 viewHeight=718/ratio; //计算的高度值 var image=this.data.images; //将图片的datadata-index做为image对象的key,而后存储图片的宽高值 image[e.target.dataset.index]={ width:viewWidth, height:viewHeight } this.setData({ images:image }) } })
最后,咱们就能够能够经过images[index].width 和 images[index].height给每个图片设置宽高了。
以上是本身在玩小程序时,关于image自适应方法的简单记录。。函数
效果以下图所示:this