阅读element-ui之el-image懒加载如何判断子元素出现在父元素内

1.核心代码

(1)isInContainer 函数

// 判断子元素是否出现在父元素内
export const isInContainer = (el, container) => {
  if (isServer || !el || !container) return false;

  const elRect = el.getBoundingClientRect();
  let containerRect;

  // 排除掉不支持getBoundingClientRect的元素
  if ([window, document, document.documentElement, null, undefined].includes(container)) {
    containerRect = {
      top: 0,
      right: window.innerWidth,
      bottom: window.innerHeight,
      left: 0
    };
  } else {
    containerRect = container.getBoundingClientRect(); // 获取元素大小及其相对于视口的位置
  }

  // 这里的四个方向判断:保证子元素出现在父元素盒子内即可。不要求子元素左右两边都包含于父元素内
  // 法一判断:
  return elRect.top < containerRect.bottom &&
    elRect.bottom > containerRect.top &&
    elRect.right > containerRect.left &&
    elRect.left < containerRect.right;

  // 这里的四个方向判断:要求子元素左右两边都包含于父元素内
  // 法二判断:
  // return elRect.top < containerRect.bottom &&
  //   elRect.bottom > containerRect.top &&
  //   elRect.right <= containerRect.right &&
  //   elRect.left >= containerRect.left;
};

(2)注解:

(下面图片中展示的图片是有两张的,由于懒加载,网络只加载一张)
法一判断的父子元素结构如下:子元素左右两边不完全在父元素视野内。
在这里插入图片描述
法二判断的父子元素结构如下:子元素左右两边必须完全在父元素视野内。
在这里插入图片描述
显然,法一的判断更合理。

2.如何懒加载

  • 通读代码了解到,就是利用节流函数优化监听图片元素是否出现在父元素内。出现了,则加载该图片。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值