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


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 相关文章推荐
QQ邮箱的一个文本编辑器代码
Mar 14 Javascript
基于jQuery实现模拟页面加载进度条
Apr 01 Javascript
Javascript URI 解析介绍
Mar 15 Javascript
JavaScript每天定时更换皮肤样式的方法
Jul 01 Javascript
JavaScript对象数组排序函数及六个用法
Dec 23 Javascript
EasyUI布局 高度自适应
Jun 04 Javascript
jQuery EasyUI学习教程之datagrid点击列表头排序
Jul 09 Javascript
微信小程序 侧滑删除(左滑删除)
May 23 Javascript
利用jsonp与代理服务器方案解决跨域问题
Sep 14 Javascript
javascript trie前缀树的示例
Jan 29 Javascript
使用RxJS更优雅地进行定时请求详析
Jun 02 Javascript
原生JS与JQ获取元素的区别详解
Feb 13 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
在Windows系统上安装PHP运行环境文字教程
2010/07/19 PHP
PHP连接Access数据库的方法小结
2013/06/20 PHP
php上传文件中文文件名乱码的解决方法
2013/11/01 PHP
Yii调试SQL的常用方法
2014/07/09 PHP
jquery select操作的日期联动实现代码
2009/12/06 Javascript
Javascript 静态页面实现随机显示广告的办法
2010/11/17 Javascript
解析Jquery取得iframe中元素的几种方法
2013/07/04 Javascript
JQuery+Ajax无刷新分页的实例代码
2014/02/08 Javascript
jQuery实现加入购物车飞入动画效果
2015/03/14 Javascript
JQuery实现可直接编辑的表格
2015/04/16 Javascript
多个js毫秒倒计时同时进行效果
2016/01/05 Javascript
js简单判断移动端系统的方法
2016/02/25 Javascript
Web打印解决方案之普通报表打印功能
2016/08/29 Javascript
JavaScript自定义分页样式
2017/01/17 Javascript
jQuery制作图片旋转效果
2017/02/02 Javascript
使用webpack搭建pixi.js开发环境
2020/02/12 Javascript
jQuery实现移动端扭蛋机抽奖
2020/11/08 jQuery
[02:29]DOTA2英雄基础教程 陈
2013/12/17 DOTA
PyQt5实现无边框窗口的标题拖动和窗口缩放
2018/04/19 Python
python3 遍历删除特定后缀名文件的方法
2018/04/23 Python
python3爬虫怎样构建请求header
2018/12/23 Python
用python写测试数据文件过程解析
2019/09/25 Python
python 实现批量替换文本中的某部分内容
2019/12/13 Python
python实现文法左递归的消除方法
2020/05/22 Python
Django框架请求生命周期实现原理
2020/11/13 Python
修复iPhone的safari浏览器上submit按钮圆角bug
2012/12/24 HTML / CSS
解决img标签上下出现间隙的方法
2016/12/14 HTML / CSS
浅析HTML5中的download属性使用
2019/03/13 HTML / CSS
德国W家官网,可直邮中国的母婴商城:Windeln.de
2021/03/03 全球购物
意外伤害赔偿协议书范文
2014/09/23 职场文书
个人批评与自我批评总结
2014/10/17 职场文书
小王子读书笔记
2015/06/29 职场文书
工程移交协议书
2016/03/24 职场文书
银行求职信范文
2019/05/13 职场文书
新手初学Java网络编程
2021/07/07 Java/Android
MySQL创建管理HASH分区
2022/04/13 MySQL