微信小程序image图片加载完成监听


Posted in Javascript onAugust 31, 2019

需求

在应用中显示的图片很多情况不满足业务需求,我们需要动态根据图片的宽高进行缩放或加载中显示的缺省图片,这是我没就需要监听图片加载完成回调,来看看微信小程序怎么实现图片加载完成回调。

实现

1. 绑定回调

通过image标签的bindload属性绑定图片加载完成回调函数,src根据图片加载是否完成绑定是否显示缺省图:

<image src='{{loadComplete?srcImagePath:defaultImagePath}}' bindload="imageLoad"/>

2. 回调监听

在js文件中定一个imageLoad函数,我们就可以通过参数拿到图片加载完成宽高信息:

imgOnLoad(ev) {
  let src = ev.currentTarget.dataset.src,
   width = ev.detail.width,
   height = ev.detail.height
 }

3. 缩放图片

我们写一个工具类,然后调用imageUtil方法对原始图片根据屏幕宽高进行等比例缩放。

function imageUtil(e) {
 var imageSize = {};
 var originalWidth = e.detail.width;//图片原始宽 
 var originalHeight = e.detail.height;//图片原始高 
 var originalScale = originalHeight / originalWidth;//图片高宽比 
 console.log('originalWidth: ' + originalWidth)
 console.log('originalHeight: ' + originalHeight)
 imageSize.imageWidth = originalWidth;
 imageSize.imageHeight = originalHeight;
 //获取屏幕宽高 
 wx.getSystemInfo({
  success: function (res) {
   var windowWidth = res.windowWidth;
   var windowHeight = res.windowHeight;
   var windowscale = windowHeight / windowWidth;//屏幕高宽比 
   if (originalScale < windowscale) {//图片高宽比小于屏幕高宽比 
    //图片缩放后的宽为屏幕宽 
    imageSize.imageWidth = windowWidth;
    imageSize.imageHeight = (windowWidth * originalHeight) / originalWidth;
   } else {//图片高宽比大于屏幕高宽比 
    //图片缩放后的高为屏幕高 
    imageSize.imageHeight = windowHeight;
    imageSize.imageWidth = (windowHeight * originalWidth) / originalHeight;
   }
   imageSize.imageWidth = windowWidth;
   imageSize.imageHeight = windowHeight;
  }
 })
 console.log('缩放后的宽: ' + imageSize.imageWidth)
 console.log('缩放后的高: ' + imageSize.imageHeight)
 return imageSize;
}

4. 修改image宽高

通过imageUtil获取到目标宽高后,this.setData({width:imageUtil(e).width, height:imageUtil(e).height}) 即可以动态修改图片宽高了(e是imageLoad方法中的参数):

<image src='{{loadComplete?srcImagePath:defaultImagePath}}' bindload="imageLoad" style='width:width;height:height'/>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery库与其他JS库冲突的解决办法
Feb 07 Javascript
JavaScript使用过程中需要注意的地方和一些基本语法
Aug 26 Javascript
通过location.replace禁止浏览器后退防止重复提交
Sep 04 Javascript
fckeditor粘贴Word时弹出窗口取消的方法
Oct 30 Javascript
使用vue.js开发时一些注意事项
Apr 27 Javascript
全面解析Angular中$Apply()及$Digest()的区别
Aug 04 Javascript
JavaScript兼容性总结之获取非行间样式案例
Aug 07 Javascript
利用JS对iframe父子(内外)页面进行操作的方法教程
Jun 15 Javascript
js实现京东轮播图效果
Jun 30 Javascript
Javascript防止图片拉伸的自适应处理方法
Dec 26 Javascript
使用Vue.js和MJML创建响应式电子邮件
Mar 23 Vue.js
vue css 相对路径导入问题级踩坑记录
Jun 05 Vue.js
JS实现使用POST方式发送请求
Aug 30 #Javascript
node.js处理前端提交的GET请求
Aug 30 #Javascript
Node.js系列之连接DB的方法(3)
Aug 30 #Javascript
Node.js系列之发起get/post请求(2)
Aug 30 #Javascript
Node.js系列之安装配置与基本使用(1)
Aug 30 #Javascript
微信小程序实现写入读取缓存详解
Aug 30 #Javascript
VUE 自定义组件模板的方法详解
Aug 30 #Javascript
You might like
PHP学习之PHP变量
2006/10/09 PHP
smarty自定义函数htmlcheckboxes用法实例
2015/01/22 PHP
thinkPHP5.0框架配置格式、加载解析与读取方法
2017/03/17 PHP
PHP结合jquery ajax实现上传多张图片,并限制图片大小操作示例
2019/03/01 PHP
PHP获取远程http或ftp文件的md5值的方法
2019/04/15 PHP
jquery ready()的几种实现方法小结
2010/06/18 Javascript
JavaScript通过this变量快速找出用户选中radio按钮的方法
2015/03/23 Javascript
基于JQuery和原生JavaScript实现网页定位导航特效
2017/04/03 jQuery
JS中Swiper的使用和轮播图效果
2017/08/11 Javascript
JavaScript 继承 封装 多态实现及原理详解
2019/07/29 Javascript
JS计算斐波拉切代码实例
2019/09/12 Javascript
[02:52]2014DOTA2西雅图国际邀请赛 CIS战队巡礼
2014/07/07 DOTA
[48:23]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#1COL VS EG第一局
2016/03/05 DOTA
[49:02]KG vs Infamous 2019国际邀请赛淘汰赛 败者组BO1 8.20.mp4
2020/07/19 DOTA
详细解析Python中的变量的数据类型
2015/05/13 Python
python实现按行切分文本文件的方法
2016/04/18 Python
Python模糊查询本地文件夹去除文件后缀的实例(7行代码)
2017/11/09 Python
Python的CGIHTTPServer交互实现详解
2018/02/08 Python
python数据预处理方式 :数据降维
2020/02/24 Python
python多进程使用函数封装实例
2020/05/02 Python
详解Django配置JWT认证方式
2020/05/09 Python
Python爬虫获取豆瓣电影并写入excel
2020/07/31 Python
利用Python如何制作贪吃蛇及AI版贪吃蛇详解
2020/08/24 Python
全球性的在线时尚男装零售商:boohooMAN
2016/12/17 全球购物
西班牙购买行李箱和背包网站:Maletas Greenwich
2019/10/08 全球购物
几个人围成一圈的问题
2013/09/26 面试题
C#软件工程师英语面试题
2015/06/07 面试题
学生会主席就职演讲稿
2014/01/14 职场文书
服务员岗位职责
2014/01/29 职场文书
职务说明书范文
2014/05/07 职场文书
医院安全生产月活动总结
2014/07/05 职场文书
蛋糕店创业计划书范文
2014/09/21 职场文书
采购员岗位职责范本
2015/04/07 职场文书
鲁冰花观后感
2015/06/10 职场文书
经营场所证明范本
2015/06/19 职场文书
CSS 制作波浪效果的思路
2021/05/18 HTML / CSS