微信小程序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 相关文章推荐
如何获取select下拉框的值(option没有及有value属性)
Nov 08 Javascript
Javascript中call和apply函数的比较和使用实例
Feb 03 Javascript
JS实现动态移动层及拖动浮层关闭的方法
Apr 30 Javascript
JS中使用apply方法通过不同数量的参数调用函数的方法
May 31 Javascript
jQuery基础知识点总结(DOM操作)
Jun 01 Javascript
jQuery获取select选中的option的value值实现方法
Aug 29 Javascript
js实现截图保存图片功能的代码示例
Feb 16 Javascript
JS跳转手机站url的若干注意事项
Oct 18 Javascript
原生js实现二级联动菜单
Nov 27 Javascript
Node.js中出现未捕获异常的处理方法
Jun 29 Javascript
Vue 监听元素前后变化值实例
Jul 29 Javascript
JS绘图Flot如何实现可选显示曲线图功能
Oct 16 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
phpinfo 系统查看参数函数代码
2009/06/05 PHP
页面利用渐进式JPEG来提升用户体验度
2014/12/01 PHP
jquery.qrcode在线生成二维码使用示例
2013/08/21 Javascript
用javascript关闭本窗口不弹出询问框的方法
2014/09/12 Javascript
JavaScript通过使用onerror设置默认图像显示代替alt
2016/03/01 Javascript
JQuery导航菜单选择特效
2016/04/11 Javascript
分享jQuery封装好的一些常用操作
2016/07/28 Javascript
node.js实现快速截图
2016/08/27 Javascript
Bootstrap复选框和单选按钮美化插件(推荐)
2016/11/23 Javascript
vuejs使用FormData实现ajax上传图片文件
2017/08/08 Javascript
vue通过点击事件读取音频文件的方法
2018/05/30 Javascript
详解Vue+Element的动态表单,动态表格(后端发送配置,前端动态生成)
2019/04/20 Javascript
vue下的@change事件的实现
2019/10/25 Javascript
jQuery实现tab栏切换效果
2020/12/22 jQuery
[01:39:42]Fnatic vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
[56:58]VP vs Optic 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python基础教程之自定义函数介绍
2014/08/29 Python
Python实现截屏的函数
2015/07/26 Python
在Django框架中设置语言偏好的教程
2015/07/27 Python
win10环境下python3.5安装步骤图文教程
2017/02/03 Python
浅谈Pandas中map, applymap and apply的区别
2018/04/10 Python
Django 实现图片上传和显示过程详解
2019/07/18 Python
Python 使用matplotlib模块模拟掷骰子
2019/08/08 Python
浅析Python __name__ 是什么
2020/07/07 Python
python list等分并从等分的子集中随机选取一个数
2020/11/16 Python
python飞机大战游戏实例讲解
2020/12/04 Python
CSS3效果:自定义“W”形运行轨迹实例
2017/03/29 HTML / CSS
印尼综合在线预订网站:Tiket.com(机票、酒店、火车、租车和娱乐)
2018/10/11 全球购物
奥林匹亚体育:Olympia Sports
2020/12/30 全球购物
英国最大的在线照明商店:Litecraft
2020/08/31 全球购物
旅游管理毕业生自荐信范文
2014/03/19 职场文书
公务员群众路线专题民主生活会发言材料
2014/09/17 职场文书
英语邀请函范文
2015/02/02 职场文书
2015年行政部工作总结
2015/04/28 职场文书
Python利用机器学习算法实现垃圾邮件的识别
2021/06/28 Python
搭建zabbix监控以及邮件报警的超级详细教学
2022/07/15 Servers