img的等待缓存事件

需求:

要保证当所有图片加载成功以后再去执行打印方法

最终代码的实现:

printMail = () => {
    this.btnDisplay='none';
    //获取iframe的window对象
    let iframe = document.getElementsByClassName('wea-email-content-iframe')[0].contentWindow;
    let img_length = iframe.document.getElementsByTagName('img').length;
    let img_success = 0;
    let img_erro = 0;
    let img_all = 0;
    let images = iframe.document.getElementsByTagName('img');
    if(img_length === 0){
      setTimeout(()=>{
        window.print();
        this.btnDisplay='block';
      },100);
    }else if(img_length > 0){
      for(let image of images){
        let oneImg = new Image(); 
        oneImg.src=image.src;
        oneImg.onload=()=>{
          img_success++;
          img_all ++;
          if(img_all == img_length){
            setTimeout(()=>{
              window.print();
              this.btnDisplay='block';
            },100);
          }
        };
        oneImg.onerror=()=>{
          img_erro++;
          img_all ++;
          if(img_all == img_length){
            setTimeout(()=>{
              window.print();
              this.btnDisplay='block';
            },100);
          }
        };      
      }
    }
  }

由此开始了今天知识点的探索【解析一下代码中的知识点哈】:

1、创建一个Image对象:var a=new Image();    定义Image对象的src: a.src=”xxx.gif”;    这样做就相当于给浏览器缓存了一张图片。

需要注意的是:src 属性一定要写到 onload 的后面,否则程序在 IE 中会出错。(刚看见,跑去改bug...)

可以通过Image对象的complete 属性来检测图像是否加载完成(每个Image对象都有一个complete属性,当图像处于

装载过程中时,该属性值false,当发生了onload、onerror、onabort中任何一个事件后,则表示图像装载过程结束(不管成

没成功),此时complete属性为true)

var img = new Image();  
img.src = oImg[0].src = this.src.replace(/small/,"big");  
oDiv.style.display = "block";  
img.complete ? oDiv.style.display = "none" : (oImg[0].onload = function() {oDiv.style.display = "none"})  

注:

ie 火狐等大众浏览器均支持 Image对象的onload事件。

ie8及以下、opera 不支持onerror事件

安利dom的Event事件:http://www.w3school.com.cn/jsref/dom_obj_event.asp

2、一直想整理一下循环便利的知识,先放一个站点:https://segmentfault.com/a/1190000013034098

3、iframe.contentWindow:http://www.runoob.com/jsref/prop-frame-contentwindow.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 JavaScript 中的 `clientHeight` 属性来获取动态添加的图片的高度,代码如下: ```javascript var img = new Image(); img.onload = function() { var height = img.clientHeight; console.log(height); }; img.src = 'image.jpg'; document.body.appendChild(img); ``` 在这个例子中,我们首先创建一个新的 `Image` 对象,然后设置 `onload` 事件处理函数来等待图片加载完成。一旦图片加载完成,就会调用该函数并获取图片高度。最后,我们使用 `console.log()` 将高度输出到控制台中。 请注意,在设置 `src` 属性之前注册 `onload` 事件处理函数非常重要,因为如果图片已经被缓存,那么 `onload` 事件可能不会被触发。 如果您需要获取多个图片的高度,可以使用 `Promise` 和 `Promise.all()`,代码如下: ```javascript function getImageHeight(src) { return new Promise(function(resolve, reject) { var img = new Image(); img.onload = function() { var height = img.clientHeight; resolve(height); }; img.onerror = reject; img.src = src; }); } var images = ['image1.jpg', 'image2.jpg', 'image3.jpg']; Promise.all(images.map(getImageHeight)).then(function(heights) { console.log(heights); }); ``` 在这个例子中,我们定义了一个 `getImageHeight()` 函数来获取单个图片的高度,并返回一个 `Promise` 对象。然后,我们定义了多个图片的 URL,使用 `Promise.all()` 和 `Array.map()` 来并行获取多个图片的高度。一旦所有图片的高度都被获取,就会调用 `.then()` 方法并将高度数组作为参数传递。最后,我们使用 `console.log()` 将高度输出到控制台中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值