// 1. 封装加载函数:将图片加载转为 Promise
const loadImage = (img) => {
  return new Promise((resolve, reject) => {
    img.src = img.dataset.src; // 替换真实路径
    img.onload = () => resolve(img);
    img.onerror = reject;
  });
};
 
// 2. 核心逻辑:监听并触发加载
const lazyLoad = () => {
  const observer = new IntersectionObserver((entries) => {
    entries.forEach(entry => {
      if (entry.isIntersecting) {
        const img = entry.target;
        
        loadImage(img)
          .then(() => console.log('Loaded:', img.src))
          .catch(err => console.error(err))
          .finally(() => observer.unobserve(img)); // 无论成功失败,停止观察
      }
    });
  });
 
  // 3. 获取所有带 data-src 的图片并开始观察
  document.querySelectorAll('img[data-src]').forEach(img => {
    observer.observe(img);
  });
};
 
// 执行
lazyLoad();