微信小程序怎么实现图片自适应
发表于:2024-11-29 作者:千家信息网编辑
千家信息网最后更新 2024年11月29日,本篇内容介绍了"微信小程序怎么实现图片自适应"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!首先我们来
千家信息网最后更新 2024年11月29日微信小程序怎么实现图片自适应
本篇内容介绍了"微信小程序怎么实现图片自适应"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
首先我们来看看图片组件给的一些说明:
属性名 | 类型 | 默认值 | 说明 |
---|---|---|---|
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: [ 'https://cache.yisu.com/upload/ask_collection/20210725/111/125022.jpg', 'https://cache.yisu.com/upload/ask_collection/20210725/111/125023.jpg', 'https://cache.yisu.com/upload/ask_collection/20210725/111/125024.jpg', 'https://cache.yisu.com/upload/ask_collection/20210725/111/125025.jpg', 'https://cache.yisu.com/upload/ask_collection/20210725/111/125026.jpg', 'https://cache.yisu.com/upload/ask_collection/20210725/111/125028.jpg', 'https://cache.yisu.com/upload/ask_collection/20210725/111/125029.jpg', 'https://cache.yisu.com/upload/ask_collection/20210725/111/125030.jpg' ] }, previewImage: function(e){ var that = this, index = e.currentTarget.dataset.index, pictures = this.data.pictures; wx.previewImage({ current: pictures[index], urls: pictures }) }})
"微信小程序怎么实现图片自适应"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
图片
宽度
模式
高度
事件
文章
横比
程序
也就是
也就是说
代码
位置
内容
函数
前提
实际
对象
常见
方向
更多
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
服务器托管哪家比较好
程序员软件开发和软件测试
两台服务器同一个网站同步数据
网络安全活动周培训
网络安全大赛通行证
北京新网互联网科技有限公司
西门子ct数据库清理
计算机四级数据库题库破译版
服务器怎么离线下载
网络安全检测与防范
福山区定制软件开发解决方案
机房服务器cpu是焊死的吗
武汉达梦数据库待遇
网络安全一天工作几小时
神武手游安卓版服务器
数据库层次模型的概念和实例
软件开发工程师应聘PPT
微信清理僵尸粉软件开发
数据库代价计算题
软件开发年度思想总结报告
社区数据库管理工作
数据库修复软件破解版
多源数据融合数据库
计算机四级数据库题库破译版
杭州有多少台服务器
软件开发管理惩罚
水利网络安全解决方案
网络安全老男孩
郑州吉夫森软件开发
陕西省学生网络安全知识竞赛