微信小程序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 相关文章推荐
在IE 浏览器中使用 jquery的fadeIn() 效果 英文字符字体加粗
Jun 02 Javascript
JavaScript可否多线程? 深入理解JavaScript定时机制
May 23 Javascript
javascript图像处理—仿射变换深度理解
Jan 16 Javascript
JS的location.href跳出框架打开新页面的方法
Sep 04 Javascript
基于JavaScript实现鼠标箭头移动图片跟着移动
Aug 30 Javascript
jQuery 实现ajax传入参数含有特殊字符的方法总结
Oct 17 Javascript
JS实现的验证身份证及获取地区功能示例
Jan 16 Javascript
VUE元素的隐藏和显示(v-show指令)
Jun 23 Javascript
微信小程序 页面滑动事件的实例详解
Oct 12 Javascript
jQuery pjax 应用简单示例
Sep 20 jQuery
JS实现表单中点击小眼睛显示隐藏密码框中的密码
Apr 13 Javascript
JavaScript小技巧带你提升你的代码技能
Sep 15 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在多维数组中根据键名快速查询其父键以及父键值的代码
2011/05/07 PHP
供参考的 php 学习提高路线分享
2011/10/23 PHP
PHP基于GD库的缩略图生成代码(支持jpg,gif,png格式)
2014/06/19 PHP
PHP中is_file()函数使用指南
2015/05/08 PHP
简单谈谈php浮点数精确运算
2016/03/10 PHP
php获取客户端IP及URL的方法示例
2017/02/03 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
2018/06/13 PHP
PHP之多条件混合筛选功能的实现方法
2019/10/09 PHP
PHP pthreads v3使用中的一些坑和注意点分析
2020/02/21 PHP
JavaScript入门教程(7) History历史对象
2009/01/31 Javascript
jQuery validate 中文API 附validate.js中文api手册
2010/07/31 Javascript
IE6/7 and IE8/9/10(IE7模式)依次隐藏具有absolute或relative的父元素和子元素后再显示父元素
2011/07/31 Javascript
JS事件在IE与FF中的区别详细解析
2013/11/20 Javascript
javascript 数组排序函数sort和reverse使用介绍
2013/11/21 Javascript
10条建议帮助你创建更好的jQuery插件
2015/05/18 Javascript
使用Angular.js开发的注意事项
2016/10/19 Javascript
Nodejs进阶:核心模块net入门学习与实例讲解
2016/11/21 NodeJs
js学习总结之DOM2兼容处理this问题的解决方法
2017/07/27 Javascript
Vue2.0用户权限控制解决方案的示例
2018/02/10 Javascript
webpack 单独打包指定JS文件的方法
2018/02/22 Javascript
微信小程序学习笔记之文件上传、下载操作图文详解
2019/03/29 Javascript
详解Vue源码学习之双向绑定
2019/04/10 Javascript
js canvas实现星空连线背景特效
2019/11/01 Javascript
详解Vue 单文件组件的三种写法
2020/02/19 Javascript
python使用xmlrpc实例讲解
2013/12/17 Python
零基础写python爬虫之urllib2使用指南
2014/11/05 Python
使用Pyinstaller转换.py文件为.exe可执行程序过程详解
2019/08/06 Python
python mqtt 客户端的实现代码实例
2019/09/25 Python
python读取word 中指定位置的表格及表格数据
2019/10/23 Python
Django中使用Json返回数据的实现方法
2020/06/03 Python
JRE、JDK、JVM之间的关系怎样
2012/05/16 面试题
《毛主席在花山》教学反思
2014/04/20 职场文书
违规违纪检讨书范文
2015/05/06 职场文书
2016婚礼主持词开场白
2015/11/24 职场文书
豆瓣2021评分最高动画剧集-豆瓣评分最高的动画剧集2021
2022/03/18 日漫
vue实现Toast组件轻提示
2022/04/10 Vue.js