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


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 相关文章推荐
你所要知道JS(DHTML)中的一些技巧
Jan 09 Javascript
菜鸟学习JavaScript小实验之函数引用
Nov 17 Javascript
根据IP的地址,区分不同的地区,查看不同的网站页面的js代码
Feb 26 Javascript
javascript基于DOM实现权限选择实例分析
May 14 Javascript
动态创建按钮的JavaScript代码
Jan 29 Javascript
javascript表单处理具体实现代码(表单、链接、按钮)
May 07 Javascript
JavaScript日期对象(Date)基本用法示例
Jan 18 Javascript
canvas知识总结
Jan 25 Javascript
详解使用create-react-app添加css modules、sasss和antd
Jul 31 Javascript
layer.confirm取消按钮绑定事件的方法
Aug 17 Javascript
用POSTMAN发送JSON格式的POST请求示例
Sep 04 Javascript
微信小程序使用websocket通讯的demo,含前后端代码,亲测可用
May 22 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/06 日漫
PHP数组无限分级数据的层级化处理代码
2012/12/29 PHP
PHP Class SoapClient not found解决方法
2018/01/20 PHP
php面向对象基础详解【星际争霸游戏案例】
2020/01/23 PHP
jquery下异步提交表单 异步跨域提交表单
2010/11/17 Javascript
Javascript跨域请求的4种解决方式
2013/03/17 Javascript
javascript中的undefined和not defined区别示例介绍
2014/02/26 Javascript
jQuery 中国省市两级联动选择附图
2014/05/14 Javascript
js获取日期:昨天今天和明天、后天
2014/06/11 Javascript
基于Echarts 3.19 制作常用的图形(非静态)
2016/05/19 Javascript
jQuery实现的多张图无缝滚动效果【测试可用】
2016/09/12 Javascript
JavaScript函数基础详解
2017/02/03 Javascript
NodeJs使用Mysql模块实现事务处理实例
2017/05/31 NodeJs
深入理解Angular4中的依赖注入
2017/06/07 Javascript
解决Webpack 热部署检测不到文件变化的问题
2018/02/22 Javascript
[05:09]DOTA2-DPC中国联赛2月22日Recap集锦
2021/03/11 DOTA
Python中操作MySQL入门实例
2015/02/08 Python
Python爬虫获取整个站点中的所有外部链接代码示例
2017/12/26 Python
详解Python之unittest单元测试代码
2018/01/24 Python
对python中的iter()函数与next()函数详解
2018/10/18 Python
python2.7实现邮件发送功能
2018/12/12 Python
Python多线程原理与用法实例剖析
2019/01/22 Python
python接口自动化测试之接口数据依赖的实现方法
2019/04/26 Python
Python机器学习算法库scikit-learn学习之决策树实现方法详解
2019/07/04 Python
python被修饰的函数消失问题解决(基于wraps函数)
2019/11/04 Python
Python 如何测试文件是否存在
2020/07/31 Python
基于Python爬取搜狐证券股票过程解析
2020/11/18 Python
解决python 执行shell命令无法获取返回值的问题
2020/12/05 Python
pytorch 实现L2和L1正则化regularization的操作
2021/03/03 Python
CSS3田字格列表的样式编写方法
2018/11/22 HTML / CSS
iframe与window.onload如何使用详解
2020/05/07 HTML / CSS
挪威太阳镜和眼镜网上商城:SmartBuyGlasses挪威
2016/08/20 全球购物
建筑工程造价专业自荐信
2014/07/08 职场文书
机电系毕业生求职信
2014/07/11 职场文书
2015年乡镇卫生院工作总结
2015/04/22 职场文书
如何写一份成功的商业计划书
2019/06/25 职场文书