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


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 相关文章推荐
使用jQuery轻松实现Ajax的实例代码
Aug 16 Javascript
Jquery下判断Id是否存在的代码
Jan 06 Javascript
javascript删除option选项的多种方法总结
Nov 22 Javascript
JavaScript前端图片加载管理器imagepool使用详解
Dec 29 Javascript
jQuery实现“扫码阅读”功能
Jan 21 Javascript
简单谈谈ES6的六个小特性
Nov 18 Javascript
详解基于vue的移动web app页面缓存解决方案
Aug 03 Javascript
Vue中的$set的使用实例代码
Oct 08 Javascript
Vue中的vue-resource示例详解
Nov 02 Javascript
浅谈JS的原型和继承
May 08 Javascript
vue router动态路由设置参数可选问题
Aug 21 Javascript
JS实现前端动态分页码代码实例
Jun 02 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
星际争霸中的对战模式介绍
2020/03/04 星际争霸
php5中date()得出的时间为什么不是当前时间的解决方法
2008/06/30 PHP
php设计模式 Command(命令模式)
2011/06/26 PHP
基于Laravel实现的用户动态模块开发
2017/09/21 PHP
Laravel框架生命周期与原理分析
2018/06/12 PHP
php 处理png图片白色背景色改为透明色的实例代码
2018/12/10 PHP
windows 2008r2+php5.6.28环境搭建详细过程
2019/06/18 PHP
php封装的page分页类完整实例代码
2020/02/01 PHP
prototype.js的Ajax对象
2006/09/23 Javascript
js判断选择的时间是否大于今天的代码
2013/08/20 Javascript
extjs render 用法介绍
2013/09/11 Javascript
JS判断客户端是手机还是PC的2个代码
2014/04/12 Javascript
JS中使用Array函数shift和pop创建可忽略参数的例子
2014/05/28 Javascript
JavaScript函数学习总结以及相关的编程习惯指南
2015/11/16 Javascript
JavaScript 实现的checkbox经典实例分享
2016/10/16 Javascript
jQuery实现弹出窗口弹出div层的实例代码
2017/01/09 Javascript
jQuery加密密码到cookie的实现代码
2017/04/18 jQuery
AngularJS下$http服务Post方法传递json参数的实例
2018/03/29 Javascript
vue router的基本使用和配置教程
2018/11/05 Javascript
jquery获取img的src值实例介绍
2019/01/16 jQuery
typescript nodejs 依赖注入实现方法代码详解
2019/07/21 NodeJs
如何基于原生javaScript生成带图片的二维码
2019/11/21 Javascript
Vue循环遍历选项赋值到对应控件的实现方法
2020/06/22 Javascript
Python 实现引用其他.py文件中的类和类的方法
2018/04/29 Python
Python图像处理模块ndimage用法实例分析
2019/09/05 Python
python3.8 微信发送服务器监控报警消息代码实现
2019/11/05 Python
Pytorch十九种损失函数的使用详解
2020/04/29 Python
python实现AHP算法的方法实例(层次分析法)
2020/09/09 Python
英国领先的维生素和营养补充剂直接供应商:Healthspan
2019/04/22 全球购物
Hello Molly美国:女性时尚在线
2019/08/26 全球购物
临床医学大学生求职信
2013/09/28 职场文书
优秀毕业生自我鉴定
2014/01/19 职场文书
《理想》教学反思
2014/02/17 职场文书
航海技术专业毕业生推荐信
2014/07/09 职场文书
群众路线个人整改措施
2014/10/24 职场文书
python数字图像处理:图像的绘制
2022/06/28 Python