微信小程序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写的点击上下滚动的小例子
Aug 27 Javascript
基于JavaScript 下namespace 功能的简单分析
Jul 05 Javascript
原生js实现复制对象、扩展对象 类似jquery中的extend()方法
Aug 30 Javascript
JQuery入门基础小实例(1)
Sep 17 Javascript
JavaScript Length 属性的总结
Nov 02 Javascript
js实现简单的碰壁反弹效果
Aug 30 Javascript
jQuery progressbar通过Ajax请求实现后台进度实时功能
Oct 11 Javascript
Vue.js 插件开发详解
Mar 29 Javascript
angularjs定时任务的设置与清除示例
Jun 02 Javascript
React-router4路由监听的实现
Aug 07 Javascript
vuex vue简单使用知识点总结
Aug 29 Javascript
webpack 最佳配置指北(推荐)
Jan 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 Ajax实现页面无刷新发表评论
2007/01/02 PHP
PHP中如何实现常用邮箱的基本判断
2014/01/07 PHP
PHP实现多图上传(结合uploadify插件)思路分析
2016/11/30 PHP
PHP编程实现脚本异步执行的方法
2017/08/09 PHP
js+xml生成级联下拉框代码
2012/07/24 Javascript
比较新旧两个数组值得增加和删除的JS代码
2013/10/30 Javascript
Jquery响应回车键直接提交表单操作代码
2014/07/25 Javascript
JavaScript定时显示广告代码分享
2015/03/02 Javascript
jquery验证手机号是否正确实例讲解
2015/11/17 Javascript
学习使用bootstrap的modal和carousel
2016/12/09 Javascript
如何在 Vue.js 中使用第三方js库
2017/04/25 Javascript
JavaScript转换数据库DateTime字段类型方法
2017/06/27 Javascript
Angularjs实现下拉框联动的示例代码
2017/08/22 Javascript
Gulp实现静态网页模块化的方法详解
2018/01/09 Javascript
使用IPython来操作Docker容器的入门指引
2015/04/08 Python
使用pandas模块读取csv文件和excel表格,并用matplotlib画图的方法
2018/06/22 Python
值得收藏,Python 开发中的高级技巧
2018/11/23 Python
使用Python向C语言的链接库传递数组、结构体、指针类型的数据
2019/01/29 Python
在pytorch中查看可训练参数的例子
2019/08/18 Python
用python解压分析jar包实例
2020/01/16 Python
学习Python爬虫的几点建议
2020/08/05 Python
python对输出的奇数偶数排序实例代码
2020/12/04 Python
CSS3实现渐变背景兼容问题
2020/05/06 HTML / CSS
W3C公布最新的HTML5标准草案
2008/10/17 HTML / CSS
H5页面适配iPhoneX(就是那么简单)
2019/12/02 HTML / CSS
澳大利亚家具和家居用品在线:BROSA
2017/11/02 全球购物
迪奥官网:Dior.com
2018/12/04 全球购物
美国修容界大佬创建的个人美妆品牌:Kevyn Aucoin Beauty
2018/12/12 全球购物
澳大利亚领先的在线药房:Pharmacy Online(有中文站)
2020/02/22 全球购物
关键字throw与throws的用法差异
2016/11/22 面试题
仓管岗位职责范本
2014/02/08 职场文书
社区健康教育实施方案
2014/03/18 职场文书
森林防火标语
2014/06/23 职场文书
小学网上祭英烈活动总结
2014/07/05 职场文书
导游词之南昌滕王阁
2019/11/29 职场文书
vue+springboot实现登录验证码
2021/05/27 Vue.js