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


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 遮罩层实现(mask)实现代码
Jan 09 Javascript
angularJS 中input示例分享
Feb 09 Javascript
jquery中的常见问题及快速解决方法小结
Jun 14 Javascript
Javascript获取background属性中url的值
Oct 17 Javascript
javascript 秒表计时器实现代码
Mar 09 Javascript
Vue AST源码解析第一篇
Jul 19 Javascript
jQuery中each循环的跳出和结束实例
Aug 16 jQuery
微信小程序loading组件显示载入动画用法示例【附源码下载】
Dec 09 Javascript
vue的toast弹窗组件实例详解
May 14 Javascript
javacript replace 正则取字符串中的值并替换【推荐】
Sep 13 Javascript
Vue父组件如何获取子组件中的变量
Jul 24 Javascript
Vue+tracking.js 实现前端人脸检测功能
Apr 16 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
PHP IN_ARRAY 函数使用注意事项
2010/07/24 PHP
如何获知PHP程序占用多少内存(memory_get_usage)
2012/09/23 PHP
ThinkPHP做文字水印时提示call an undefined function exif_imagetype()解决方法
2014/10/30 PHP
简单实用的PHP防注入类实例
2014/12/05 PHP
PHP中使用curl入门教程
2015/07/02 PHP
有关PHP 中 config.m4 的探索
2020/08/26 PHP
IE与FireFox的兼容性问题分析
2007/04/22 Javascript
基于jQuery的实现简单的分页控件
2010/10/10 Javascript
JavaScript中prototype为对象添加属性的误区介绍
2013/10/15 Javascript
一个非常全面的javascript URL解析函数和分段URL解析方法
2014/04/12 Javascript
基于jquery实现的文字向上跑动类似跑马灯的效果
2014/06/17 Javascript
使用jquery.qrcode.js生成二维码插件
2016/10/17 Javascript
Bootstrap基本插件学习笔记之Popover提示框(19)
2016/12/08 Javascript
解析微信JS-SDK配置授权,实现分享接口
2016/12/09 Javascript
微信小程序 开发之滑块视图容器(swiper)详解及实例代码
2017/02/22 Javascript
bootstrap Table插件使用demo
2017/08/07 Javascript
Javascript快速实现浏览器系统通知
2017/08/26 Javascript
如何使用VuePress搭建一个类型element ui文档
2019/02/14 Javascript
layui实现tab的添加拒绝重复的方法
2019/09/04 Javascript
让你30分钟快速掌握vue3教程
2020/10/26 Javascript
python str与repr的区别
2013/03/23 Python
用Python实现一个简单的多线程TCP服务器的教程
2015/05/05 Python
Linux CentOS Python开发环境搭建教程
2018/11/28 Python
Django实现简单网页弹出警告代码
2019/11/15 Python
python创建文本文件的简单方法
2020/08/30 Python
python3代码输出嵌套式对象实例详解
2020/12/03 Python
俄罗斯马克西多姆家居用品网上商店:Максидом
2020/02/06 全球购物
提高EJB性能都有哪些技巧
2012/03/25 面试题
毕业生幼师求职自荐信
2013/10/01 职场文书
诉前财产保全担保书
2014/05/20 职场文书
市委常委会班子党的群众路线教育实践活动整改方案
2014/10/25 职场文书
初中生思想道德自我评价
2015/03/09 职场文书
公司禁烟通知
2015/04/23 职场文书
复兴之路纪录片观后感
2015/06/02 职场文书
2016年第16个全民国防教育日宣传活动总结
2016/04/05 职场文书
Android移动应用开发指南之六种布局详解
2022/09/23 Java/Android