微信小程序图片自适应实现解析


Posted in Javascript onJanuary 21, 2020

这篇文章主要介绍了微信小程序图片自适应实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

关于微信小程序图片自适应的做法

在日常业务场景中,很多地方都需要图片进行列表的显示,但是这样就存在一个问题,由于每张上传的图片规格并不是一样的,就会发生图片要么过大,要么过小,或者被拉伸的情况,如下图

微信小程序图片自适应实现解析

对于这个情况,我的思路是可以使用image标签内的bindload属性进行计算,bindload属性的介绍如下

微信小程序图片自适应实现解析

下面就是具体的方法流程

1、首先我们在页面上进行布局,只需要给image标签的view容器添加宽高即可,并使用wx:for进行遍历渲染,通过自定义属性data-i传入索引值,容器我同时也加入了动态属性,就是为了计算后图片不会超出整个容器的大小导致布局的错乱

<block wx:for="{{list_1}}" wx:key="{{index}}">
  <view class="top_img" style="width:{{imgmsg?imgmsg[index].width:''}}px;height:{{imgmsg?imgmsg[index].height:''}}px">
      <image style="width:{{imgmsg[index].width}}px !important;height:{{imgmsg[index].height}}px !important;" 
      src="{{item.url}}" 
      bindload="imageLoad"
      data-i="{{index}}" />
    </view>
 </block>

2、在js中定义模拟数据,并定义image属性空对象,用该对象通过key值放入相对应下标的图片宽高属性

page({
  data:{
    list_1: [{ url: '../../img/1.jpg' }, { url: '../../img/2.jpg' }, { url: '../../img/3.jpg' }, { url: '../../img/4.jpg' }],
    imgmsg:{}
  }
})

3、添加imageLoad方法去进行图片大小的计算,这里我们可以通过wx.createSelectorQuery()方法去获取图片容器的宽高,通过事件对象可以获取图片原始宽高,具体方法如下

//显示图片自适应
 imageLoad(e) {
  //获取小程序节点属性的api
  const query = wx.createSelectorQuery()
  var imgw = e.detail.width, //图片原始宽度
   imgh = e.detail.height, //图片原始高度
   index = e.currentTarget.dataset.i, //图片下标
   ratio = imgw / imgh, //图片宽高比
   image = this.data.imgmsg, //图片宽高的索引对象
   that = this,
   viewW = null,//容器宽度
   viewH = null;//容器高度
  query.select('.top_img').boundingClientRect(function(res) {
   viewW = res.width; 
   viewH = res.height;
   //由于图片的大小不一定,可能宽高都会超出整个图片容器,因此这里多用了图片本身的宽高进行的判断
   if (imgw > imgh || imgw > viewW) { //当图片自身的宽大于图片自身的高,将图片的宽等于容器的宽,去计算图片的高
    imgw = viewW;
    imgh = imgw / ratio;
   } else if (imgw < imgh || imgh > viewH) { //当图片自身的宽小于图片自身的高,将图片的高等于容器的高,去计算容器的宽
    imgw = viewH * ratio;
    imgh = viewH;
   }
   //把图片计算后的宽高属性根据下标存入到对象中,并使用math的floor方法取整
   image[index] = {
    width: Math.floor(imgw),
    height: Math.floor(imgh)
   }
   //更新视图
   that.setData({
    imgmsg: image
   })
  })
  query.exec()
 },

好了,到这里,我们可以看下具体的结果了

微信小程序图片自适应实现解析

微信小程序图片自适应实现解析

微信小程序图片自适应实现解析

简单的列表图片自适应功能实现了,但是这个方法还能进行扩展和优化,如果有好的想法可以一起学习交流,共同提高

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript代码复用模式实例分析
Dec 02 Javascript
利用jquery包将字符串生成二维码图片
Sep 12 Javascript
JavaScript使用ActiveXObject访问Access和SQL Server数据库
Apr 02 Javascript
JS遍历数组及打印数组实例分析
Jan 21 Javascript
JavaScript 数据类型详解
Mar 13 Javascript
深究AngularJS如何获取input的焦点(自定义指令)
Jun 12 Javascript
node+vue实现用户注册和头像上传的实例代码
Jul 20 Javascript
vue组件学习教程
Sep 09 Javascript
jQuery实现的淡入淡出图片轮播效果示例
Aug 29 jQuery
Vue基础配置讲解
Nov 29 Javascript
bootstrap-table后端分页功能完整实例
Jun 01 Javascript
Ant Design Pro 之 ProTable使用操作
Oct 31 Javascript
微信小程序button标签open-type属性原理解析
Jan 21 #Javascript
Vue实现兄弟组件间的联动效果
Jan 21 #Javascript
微信小程序如何通过用户授权获取手机号(getPhoneNumber)
Jan 21 #Javascript
微信小程序如何实现精确的日期时间选择器
Jan 21 #Javascript
微信小程序如何实现点击图片放大功能
Jan 21 #Javascript
微信小程序修改checkbox的样式代码实例
Jan 21 #Javascript
微信小程序全选多选效果实现代码解析
Jan 21 #Javascript
You might like
火车头采集器3.0采集图文教程
2007/03/17 PHP
php getsiteurl()函数
2009/09/05 PHP
zend framework配置操作数据库实例分析
2012/12/06 PHP
php post换行的方法
2020/02/03 PHP
jquery刷新页面的实现代码(局部及全页面刷新)
2011/07/11 Javascript
Eval and new funciton not the same thing
2012/12/27 Javascript
JavaScript编程的10个实用小技巧
2014/04/18 Javascript
javascript基本类型详解
2014/11/28 Javascript
js如何判断输入字符串长度
2015/12/16 Javascript
微信小程序 框架详解及实例应用
2016/09/26 Javascript
JavaScript 基础表单验证示例(纯Js实现)
2017/07/20 Javascript
基于LayUI实现前端分页功能的方法
2017/07/22 Javascript
基于JavaScript实现五子棋游戏
2020/08/26 Javascript
vue.js中$set与数组更新方法
2018/03/08 Javascript
JavaScript 隐性类型转换步骤浅析
2018/03/15 Javascript
nodejs中实现修改用户路由功能
2019/05/24 NodeJs
微信小程序按钮点击动画效果的实现
2019/09/04 Javascript
解决vuex数据异步造成初始化的时候没值报错问题
2019/11/13 Javascript
[03:09]显微镜下的DOTA2第一期——带你走进华丽的DOTA2世界
2014/06/20 DOTA
[01:20:37]FNATIC vs NIP 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
Python中使用strip()方法删除字符串中空格的教程
2015/05/20 Python
Python 专题五 列表基础知识(二维list排序、获取下标和处理txt文本实例)
2017/03/20 Python
Python语言描述机器学习之Logistic回归算法
2017/12/21 Python
Python判断两个list是否是父子集关系的实例
2018/05/04 Python
Python多图片合并PDF的方法
2019/01/03 Python
浅析Python 实现一个自动化翻译和替换的工具
2019/04/14 Python
python3用PIL把图片转换为RGB图片的实例
2019/07/04 Python
Python SELENIUM上传文件或图片实现过程
2019/10/28 Python
基于python 等频分箱qcut问题的解决
2020/03/03 Python
Bailey帽子官方商店:Bailey Hats
2018/09/25 全球购物
澳大利亚在线奢侈品时尚零售平台:Azura Runway
2021/01/13 全球购物
保险公司早会主持词
2014/03/22 职场文书
2015年银行大堂经理工作总结
2015/04/24 职场文书
2015年高中生国庆节演讲稿
2015/07/30 职场文书
导游词之麻姑仙境
2019/11/18 职场文书
将MySQL的表数据全量导入clichhouse库中
2022/03/21 MySQL