初次认识IntersectionObserver

先说一下需求,页面上有展示区域,与很多卡片组成(见下草图),每一个卡片都需要根据当前的时间跑计时器来累加时间。就在想如果卡片有很多的话页面不得卡死?那是否可以就在可视区域跑计时器,这样肯定会好很多。于是认识了IntersectionObserver,记录一下第一次使用。

new IntersectionObserver 接收一个回调函数与一个配置对象

  • callback: 一个函数,当目标元素的可见性发生变化时被调用。这个函数接收两个参数:

    • entries: 一个 IntersectionObserverEntry 对象的数组,每个对象包含一个目标元素的信息。
    • observer: 当前的 IntersectionObserver 实例。
  • options: 一个配置对象,包含以下属性:

    • root: 指定一个元素作为根元素,默认为 null,表示使用浏览器的视口。
    • rootMargin: 为根元素的边界增加额外的边距,格式为 "top right bottom left",单位可以是像素或百分比。
    • threshold: 一个或多个值,表示目标元素与根元素相交的比例。当相交比例达到这些阈值时,会触发回调。可以是一个数值或一个数值数组。
js 复制代码
initIntersectionObserver() {
      const options = {
        root: this.$parent.$el, // 默认浏览器的视口作为根元素,这里我使用的是父元素
        rootMargin: "0px", // 不增加额外的边距
        threshold: 0.5, // 当元素至少有 50% 在视口内时触发回调
      };
      this.observer = new IntersectionObserver(
        this.handleIntersection,
        options
      );
      this.observer.observe(this.$refs.cardItem);
    },
    handleIntersection(entries, observer) {
      entries.forEach((entry) => {
        //   判断元素是否在可视区域
        if (entry.isIntersecting) {
          this.startTimer();
        } else {
          this.stopTimer();
        }
      });
    },

卡片组件完整js代码 --> cardsItem.vue

相关推荐
持续前行7 小时前
vscode 中找settings.json 配置
前端·javascript·vue.js
JosieBook7 小时前
【Vue】11 Vue技术——Vue 中的事件处理详解
前端·javascript·vue.js
安逸点7 小时前
Vue项目中使用xlsx库解析Excel文件
vue.js
一只小阿乐7 小时前
vue 改变查询参数的值
前端·javascript·vue.js·路由·router·网文·未花中文网
小酒星小杜8 小时前
在AI时代下,技术人应该学会构建自己的反Demo地狱系统
前端·vue.js·ai编程
Code知行合壹8 小时前
Pinia入门
vue.js
今天也要晒太阳4738 小时前
element表单和vxe表单联动校验的实现
vue.js
依赖_赖9 小时前
前端实现token无感刷新
前端·javascript·vue.js
hhcccchh10 小时前
学习vue第十三天 Vue3组件深入指南:组件的艺术与科学
javascript·vue.js·学习
zhengxianyi51510 小时前
ruoyi-vue-pro本地环境搭建(超级详细,带异常处理)
前端·vue.js·前后端分离·ruoyi-vue-pro