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


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工具 Event封装
Aug 21 Javascript
使用jQuery.Validate进行客户端验证(初级篇) 不使用微软验证控件的理由
Jun 28 Javascript
基于JQuery实现的类似购物商城的购物车
Dec 06 Javascript
jquery显示loading图片直到网页加载完成的方法
Jun 25 Javascript
详解JavaScript对象和数组
Dec 03 Javascript
基于BootStrap的图片轮播效果展示实例代码
May 23 Javascript
jquery+html仿翻页相册功能
Dec 20 Javascript
JS+CSS实现下拉刷新/上拉加载插件
Mar 31 Javascript
详解Vue中数组和对象更改后视图不刷新的问题
Sep 21 Javascript
npm 语义版本控制详解
Sep 10 Javascript
如何正确理解vue中的key详解
Nov 02 Javascript
解决vue自定义全局消息框组件问题
Nov 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
简单采集了yahoo的一些数据
2007/02/14 PHP
PHP 字符截取 解决中文的截取问题,不用mb系列
2009/09/29 PHP
JS类中定义原型方法的两种实现的区别
2007/03/08 Javascript
IE和FireFox(FF)中js和css的不同
2009/04/13 Javascript
JavaScript delete 属性的使用
2009/10/08 Javascript
JavaScript高级程序设计 阅读笔记(二十一) JavaScript中的XML
2012/09/14 Javascript
javascipt基础内容--需要注意的细节
2013/04/10 Javascript
node.js中的path.extname方法使用说明
2014/12/09 Javascript
javascript实现根据身份证号读取相关信息
2014/12/17 Javascript
jQuery实现返回顶部功能
2016/02/23 Javascript
深入理解Node.js中通用基础设计模式
2017/09/19 Javascript
实现图片首尾平滑轮播(JS原生方法—节流)
2017/10/17 Javascript
Vue起步(无cli)的啊教程详解
2019/04/11 Javascript
在Vue项目中,防止页面被缩放和放大示例
2019/10/28 Javascript
vue 如何使用递归组件
2020/10/23 Javascript
Python Mysql自动备份脚本
2008/07/14 Python
Python实现的几个常用排序算法实例
2014/06/16 Python
详细讲解Python中的文件I/O操作
2015/05/24 Python
Python实现PS滤镜碎片特效功能示例
2018/01/24 Python
PyQt5实现无边框窗口的标题拖动和窗口缩放
2018/04/19 Python
python随机在一张图像上截取任意大小图片的方法
2019/01/24 Python
python 实现图片批量压缩的示例
2020/12/18 Python
HTML5实现页面切换激活的PageVisibility API使用初探
2016/05/13 HTML / CSS
Proenza Schouler官方网站:纽约女装和配饰品牌
2019/01/03 全球购物
台湾东南旅游社网站:东南旅游
2019/02/11 全球购物
结构和类有什么异同
2012/07/16 面试题
一份创业计划书范文
2014/02/08 职场文书
村级环境卫生整治方案
2014/05/04 职场文书
六查六看自查报告
2014/10/14 职场文书
关于调整工作时间的通知
2015/04/24 职场文书
2015年小学总务工作总结
2015/07/21 职场文书
教师网络培训心得体会
2016/01/09 职场文书
《生物入侵者》教学反思
2016/02/16 职场文书
导游词之广东佛山(南风古灶)
2019/09/24 职场文书
Python并发编程实例教程之线程的玩法
2021/06/20 Python
Python办公自动化之教你如何用Python将任意文件转为PDF格式
2021/06/28 Python