JavaScript 全局处理所有 img 加载错误

JavaScript 全局处理所有 img 加载错误,显示占位 base64 图片

(function () {
  // 图片加载失败显示的base64图片
  const base64 = "data:image/png;base64,xxxxxx";
  // 图片加载错误处理样式名称
  const errorClassName = "img-load-error";

  // img 加载失败,添加错误处理样式 errorClassName
  document.addEventListener(
    "error",
    (e) => {
      let target = e.target;
      const tagName = target.tagName || "";
      const curTimes = Number(target.dataset.retryTimes) || 0;
      if (tagName.toLowerCase() === "img") {
      	// 加载失败3次后,添加错误处理样式
        if (curTimes >= 3) {
          target.classList.remove(errorClassName);
          target.classList.add(errorClassName);
        } else {
          target.dataset.retryTimes = curTimes + 1;
          target.src = target.src;
        }
      }
      target = null;
    },
    true
  );

  // 图片加载错误处理style
  function errorStyle() {
    const style = document.createElement("style");
    document.head.appendChild(style);
    style.innerHTML = `
        img.${errorClassName} {
            display: inline-block;
            transform: scale(1);
            content: "";
            color: transparent;
        }
        img.${errorClassName}::before {
            content: "";
            position: absolute;
            left: 0;
            top: 0;
            width: 100%;
            height: 100%;
            background: #f5f5f5 url(${base64}) no-repeat center / 50% 50%;
        }
    `;
  }

  // 注入图片错误处理样式
  window.addEventListener("load", errorStyle, { once: true });
})();

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值