微信小程序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 相关文章推荐
JavaScript 学习点滴记录
Apr 24 Javascript
javascript代码运行不出来执行错误的可能情况整理
Oct 18 Javascript
浅析tr的隐藏和显示问题
Mar 05 Javascript
javascript实现 百度翻译 可折叠的分享按钮列表
Mar 12 Javascript
JavaScript实现经纬度转换成地址功能
Mar 28 Javascript
微信小程序 本地数据读取实例
Apr 27 Javascript
原生JS实现图片网格式渐显、渐隐效果
Jun 05 Javascript
JS使用正则表达式验证身份证号码
Jun 23 Javascript
promise和co搭配生成器函数方式解决js代码异步流程的比较
May 25 Javascript
vue采用EventBus实现跨组件通信及注意事项小结
Jun 14 Javascript
jQuery表单选择器用法详解
Aug 22 jQuery
JavaScript实现多球运动效果
Sep 07 Javascript
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做到页面注册审核
2017/03/02 PHP
js 实现无缝滚动 兼容IE和FF
2009/07/15 Javascript
js url传值中文乱码之解决之道
2009/11/20 Javascript
分享精心挑选的12款优秀jQuery Ajax分页插件和教程
2012/08/09 Javascript
JQuery实现简单时尚快捷的气泡提示插件
2012/12/20 Javascript
jQuery提示插件alertify使用指南
2015/04/21 Javascript
JavaScript中字符串拼接的基本方法
2015/07/07 Javascript
谈一谈jQuery核心架构设计
2016/03/28 Javascript
BootStrap创建响应式导航条实例代码
2016/05/31 Javascript
基于JavaScript实现瀑布流效果
2017/03/29 Javascript
vue的mixins属性详解
2018/03/14 Javascript
JavaScript实现计算圆周率到小数点后100位的方法示例
2018/05/08 Javascript
详解vue如何使用rules对表单字段进行校验
2018/10/17 Javascript
实例分析JS中的相等性判断===、 ==和Object.is()
2019/11/17 Javascript
vue 检测用户上传图片宽高的方法
2020/02/06 Javascript
[00:50]2014DOTA2国际邀请赛 NEWBEE战队回顾
2014/08/01 DOTA
python开发简易版在线音乐播放器
2017/03/03 Python
Python实现小数转化为百分数的格式化输出方法示例
2017/09/20 Python
PyQt5每天必学之单行文本框
2018/04/19 Python
小白入门篇使用Python搭建点击率预估模型
2018/10/12 Python
python 实现敏感词过滤的方法
2019/01/21 Python
Python提取特定时间段内数据的方法实例
2019/04/01 Python
python抓取需要扫微信登陆页面
2019/04/29 Python
Python检测数据类型的方法总结
2019/05/20 Python
python小程序实现刷票功能详解
2019/07/17 Python
基于Python实现2种反转链表方法代码实例
2020/07/06 Python
俄罗斯香水和化妆品在线商店:Aroma-butik
2020/02/28 全球购物
土木工程实习生自我鉴定
2013/09/19 职场文书
入党积极分子自我鉴定
2014/02/18 职场文书
毕业留言寄语大全
2014/04/10 职场文书
体育专业求职信
2014/07/16 职场文书
政治学专业毕业生求职信
2014/08/11 职场文书
寒暑假实习证明书模板
2014/11/29 职场文书
毕业设计论文致谢词
2015/05/14 职场文书
薪资证明范本
2015/06/19 职场文书
python删除csv文件的行列
2021/04/06 Python