微信小程序怎么实现图片自适应(微信小程序,开发技术)

时间:2024-04-28 05:44:29 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

首先我们来看看图片组件给的一些说明:

属性名类型默认值说明srcString
图片资源地址modeString'scaleToFill'图片裁剪、缩放的模式binderrorHandleEvent
当错误发生时,发布到 AppService 的事件名,事件对象event.detail = {errMsg: 'something wrong'}bindloadHandleEvent
当图片载入完毕时,发布到 AppService 的事件名,事件对象event.detail = {height:'图片高度px', width:'图片宽度px'}

注:image组件默认宽度300px、高度225px

mode 有 13 种模式,其中 4 种是缩放模式,9 种是裁剪模式。

模式说明scaleToFill不保持纵横比缩放图片,使图片的宽高完全拉伸至填满 image 元素aspectFit保持纵横比缩放图片,使图片的长边能完全显示出来。也就是说,可以完整地将图片显示出来。aspectFill保持纵横比缩放图片,只保证图片的短边能完全显示出来。也就是说,图片通常只在水平或垂直方向是完整的,另一个方向将会发生截取。widthFix宽度不变,高度自动变化,保持原图宽高比不变

如果说要有一种比较合适的方案,大概是widthFix,然而上面这些模式中,所要求的前提是需要给图片标签设定一个宽度值或者一个高度值。但有时候我们根本不想限定图片的宽高,我们需要的是图片自身能够根据自身的大小来适配。

而widthFix模式就要求你必须先设定一个宽度值,如果出来的图片比给定的width小呢?此时图片则会发生拉伸的现象。(常见应用在文章中,因为文章中的插图有可能比默认的宽小,比如常见的表情)。

其实上面的标签中,图片为我们预留了一个函数bindLoad。下面看看我是怎么支持自适应的。

有一个前提,就是多图的时候,你需要知道这个图片是处于所有中的位置index,我们通过这个位置来保存图片的宽度和高度。

<imagesrc="http://ww4.sinaimg.cn/bmiddle/006q8Q6bjw1fbwucs1cctj30t80t8myh.jpg"bindLoad="imageLoad"data-index="0"mode="scaleToFill"/><imagesrc="http://ww4.sinaimg.cn/bmiddle/006q8Q6bjw1fbwucs1cctj30t80t8myh.jpg"bindLoad="imageLoad"data-index="1"mode="scaleToFill"/>
varpx2rpx=2,windowWidth=375;page({data:{imageSize:{}},onLoad:function(options){wx.getSystemInfo({success:function(res){windowWidth=res.windowWidth;px2rpx=750/windowWidth;}})},imageLoad:function(e){//单位rpxvaroriginWidth=e.detail.width*px2rpx,originHeight=e.detail.height*px2rpx,ratio=originWidth/originHeight;varviewWidth=710,viewHeight//设定一个初始宽度//当它的宽度大于初始宽度时,实际效果跟mode=widthFix一致if(originWidth>=viewWidth){//宽度等于viewWidth,只需要求出高度就能实现自适应viewHeight=viewWidth/ratio;}else{//如果宽度小于初始值,这时就不要缩放了viewWidth=originWidth;viewHeight=originHeight;}varimageSize=this.data.imageSize;imageSize[e.target.dataset.index]={width:viewWidth,height:viewHeight}this.setData({imageSize:imageSize})}})

如果我们的图片中不仅限定了宽度,还限定了高度值,比如我们限定max-height之类的。那我们的imageLoad函数则要调整为根据他们的宽高比来输出。

imageLoad:function(e){varoriginWidth=e.detail.width*px2rpx,originHeight=e.detail.height*px2rpx,ratio=originWidth/originHeight;varviewWidth=220,viewHeight=165,viewRatio=viewWidth/viewHeight;if(ratio>=viewRatio){if(originWidth>=viewWidth){viewHeight=viewWidth/ratio;}else{viewWidth=originWidth;viewHeight=originHeight}}else{if(originWidth>=viewWidth){viewWidth=viewRatio*originHeight}else{viewWidth=viewRatio*originWidth;viewHeight=viewRatio*originHeight;}}varimage=this.data.imageSize;image[e.target.dataset.index]={width:viewWidth,height:viewHeight}this.setData({imageSize:image})},

附录:小图预览,进入全屏模式。

用预览图片的API,wx.previewImage(OBJECT)以下是对应的代码,样式部分,自行布局。

html代码:

<viewclass="wrap"><imagewx:for="{{pictures}}"wx:key="unique"src="{{item}}"data-index="{{index}}"bindtap="previewImage"></image></view>

JS

Page({data:{pictures:['https://qixn-bj.oss-cn-beijing.aliyuncs.com/seosjz/uploadfile/all/jpg/hzldh52bo5o.jpg','https://qixn-bj.oss-cn-beijing.aliyuncs.com/seosjz/uploadfile/all/jpg/mo1i3puesvu.jpg','https://qixn-bj.oss-cn-beijing.aliyuncs.com/seosjz/uploadfile/all/jpg/24dgg13wu5c.jpg','https://qixn-bj.oss-cn-beijing.aliyuncs.com/seosjz/uploadfile/all/jpg/piro2zlchfu.jpg','https://qixn-bj.oss-cn-beijing.aliyuncs.com/seosjz/uploadfile/all/jpg/tdd4nfrnwii.jpg','https://qixn-bj.oss-cn-beijing.aliyuncs.com/seosjz/uploadfile/all/jpg/544wud1wnab.jpg','https://qixn-bj.oss-cn-beijing.aliyuncs.com/seosjz/uploadfile/all/jpg/sjnreun554t.jpg','https://qixn-bj.oss-cn-beijing.aliyuncs.com/seosjz/uploadfile/all/jpg/4pgwzg3vdbc.jpg']},previewImage:function(e){varthat=this,index=e.currentTarget.dataset.index,pictures=this.data.pictures;wx.previewImage({current:pictures[index],urls:pictures})}})
 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:微信小程序怎么实现图片自适应的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:微信小程序怎么实现自定义toast下一篇:

3 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18