LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

前端使用Image()函数加载base64图片不兼容无onload事件解决方法

freeflydom
2023年7月4日 16:57 本文热度 507

Image()函数将会创建一个新的HTMLImageElement实例。它的功能等价于 document.createElement('img')。

正常情况下,我们使用下面方法加载图片,是能能够获取到onload事件的:

  1. const img = new Image();

  2. img.src = 'picture.jpg';

  3. img.onload = () => {

  4.  console.log('success');

  5. }


但是如果你需要加载的图片是base64图片时,可能是因为没有请求发出,onload事件是无法执行的。

几经尝试,最终考虑将base64图片转位ObjectUrl再加载,好处是无需后端,纯前端即可兼容。移动端兼容性也非常不错。

具体实现如下:

  1. // base64转Blob

  2. const base64ToBlob = (base64Data) => {

  3.  const arr = base64Data.split(','),

  4.    type = arr[0].match(/:(.*?);/)[1],

  5.    bstr = atob(arr[1]),

  6.    len = bstr.length,

  7.    u8Arr = new Uint8Array(l);

  8.  

  9.  while (len--) u8Arr[l] = bstr.charCodeAt(len);

  10.  

  11.  return new Blob([u8Arr], { type });

  12. }

  13.  

  14. const base64 = "data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==";

  15. const imgBlob = base64ToBlob(base64)

  16.  

  17. const img = new Image();

  18. img.src = window.URL.createObjectURL(imgBlob); // blob:http://xxx

  19. img.onload = function () {

  20.  console.log('success')

  21. }


URL.createObjectURL 可能有一些兼容性问题,如果你在使用过程遇到,可以hack兼容一下

  1. function getObjectURL(blob) {

  2.  var url = null;

  3.  if (window.createObjectURL != undefined) {

  4.    url = window.createObjectURL(blob);

  5.  } else if (window.URL != undefined) {

  6.    url = window.URL.createObjectURL(blob);

  7.  } else if (window.webkitURL != undefined) {

  8.    url = window.webkitURL.createObjectURL(blob);

  9.  }

  10.  return url;

  11. }



该文章在 2023/7/4 16:58:00 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved