小编给大家分享一下微信小程序实现图片自适应的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

十余年的朝天网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。网络营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整朝天建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联从事“朝天网站设计”,“朝天网站推广”以来,每个客户项目都认真落实执行。
大家都知道微信小程序图片自适应,是一个比较常见的需求,平时我们在WEBView中,只需要设置max-width:100%.在微信里面虽然widthFix也能实现,但有一个缺陷就是图片的宽度值要大于或者等于设定的值,否则就会发生拉伸变形,本文通过另外一种来适应。
首先我们来看看图片组件给的一些说明:
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| src | String | 图片资源地址 | |
| mode | String | 'scaleToFill' | 图片裁剪、缩放的模式 |
| binderror | HandleEvent | 当错误发生时,发布到 AppService 的事件名,事件对象event.detail = {errMsg: 'something wrong'} | |
| bindload | HandleEvent | 当图片载入完毕时,发布到 AppService 的事件名,事件对象event.detail = {height:'图片高度px', width:'图片宽度px'} |
注:image组件默认宽度300px、高度225px
mode 有 13 种模式,其中 4 种是缩放模式,9 种是裁剪模式。
| 模式 | 说明 |
|---|---|
| scaleToFill | 不保持纵横比缩放图片,使图片的宽高完全拉伸至填满 image 元素 |
| aspectFit | 保持纵横比缩放图片,使图片的长边能完全显示出来。也就是说,可以完整地将图片显示出来。 |
| aspectFill | 保持纵横比缩放图片,只保证图片的短边能完全显示出来。也就是说,图片通常只在水平或垂直方向是完整的,另一个方向将会发生截取。 |
| widthFix | 宽度不变,高度自动变化,保持原图宽高比不变 |
如果说要有一种比较合适的方案,大概是widthFix,然而上面这些模式中,所要求的前提是需要给图片标签设定一个宽度值或者一个高度值。但有时候我们根本不想限定图片的宽高,我们需要的是图片自身能够根据自身的大小来适配。
而widthFix模式就要求你必须先设定一个宽度值,如果出来的图片比给定的width小呢?此时图片则会发生拉伸的现象。(常见应用在文章中,因为文章中的插图有可能比默认的宽小,比如常见的表情)。
其实上面的标签中,图片为我们预留了一个函数bindLoad。下面看看我是怎么支持自适应的。
有一个前提,就是多图的时候,你需要知道这个图片是处于所有中的位置index,我们通过这个位置来保存图片的宽度和高度。
var px2rpx = 2, windowWidth=375;
page({
data:{
imageSize:{}
},
onLoad:function(options){
wx.getSystemInfo({
success: function(res) {
windowWidth = res.windowWidth;
px2rpx = 750 / windowWidth;
}
})
},
imageLoad:function(e){
//单位rpx
var originWidth = e.detail.width*px2rpx,
originHeight = e.detail.height*px2rpx,
ratio = originWidth/originHeight;
var viewWidth = 710,viewHeight//设定一个初始宽度
//当它的宽度大于初始宽度时,实际效果跟mode=widthFix一致
if(originWidth>= viewWidth){
//宽度等于viewWidth,只需要求出高度就能实现自适应
viewHeight = viewWidth/ratio;
}else{
//如果宽度小于初始值,这时就不要缩放了
viewWidth = originWidth;
viewHeight = originHeight;
}
var imageSize = this.data.imageSize;
imageSize[e.target.dataset.index] = {
width:viewWidth,
height:viewHeight
}
this.setData({
imageSize:imageSize
})
}
})如果我们的图片中不仅限定了宽度,还限定了高度值,比如我们限定max-height之类的。那我们的imageLoad函数则要调整为根据他们的宽高比来输出。
imageLoad:function(e){
var originWidth = e.detail.width * px2rpx,
originHeight=e.detail.height *px2rpx,
ratio = originWidth/originHeight ;
var viewWidth = 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;
}
}
var image = this.data.imageSize;
image[e.target.dataset.index]={
width:viewWidth,
height:viewHeight
}
this.setData({
imageSize:image
})
},附录:小图预览,进入全屏模式。
用预览图片的API,wx.previewImage(OBJECT)以下是对应的代码,样式部分,自行布局。
html代码:
JS
Page({
data: {
pictures: [
'/upload/otherpic45/2690.jpg',
'/upload/otherpic45/2691.jpg',
'/upload/otherpic45/2692.jpg',
'/upload/otherpic45/2693.jpg',
'/upload/otherpic45/2694.jpg',
'/upload/otherpic45/2695.jpg',
'/upload/otherpic45/2696.jpg',
'/upload/otherpic45/2697.jpg'
]
},
previewImage: function(e){
var that = this,
index = e.currentTarget.dataset.index,
pictures = this.data.pictures;
wx.previewImage({
current: pictures[index],
urls: pictures
})
}
})以上是“微信小程序实现图片自适应的方法”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!
标题名称:微信小程序实现图片自适应的方法
文章位置:http://www.scyingshan.cn/article/ijcdip.html


咨询
建站咨询
