初次认识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

相关推荐
大龄码农有梦想10 小时前
Vue + BPMN.js + Camunda:搭建企业级流程设计器完整实践
javascript·vue.js·流程设计器·bpmn.js·bpmn·流程审批·工作流设计器
岁岁种桃花儿14 小时前
Vue核心语法第一篇:Vue是什么?
前端·javascript·vue.js
你挚爱的强哥16 小时前
【chromeDownload】自定义组件:多用于登录框底部提供下载Chrome谷歌浏览器的链接
前端·vue.js·chrome
daols8816 小时前
vue 甘特图 vxe-gantt 任务条拖拽自动更新日期
javascript·vue.js·甘特图
java1234_小锋1 天前
Vue3专题 - 组件基础
vue.js·vite
阿懂在掘金2 天前
同一份弹窗我重构了三次:从 v-model 地狱到路由式调用,终于治好了模板臃肿
前端·vue.js·前端框架
小锋java12342 天前
【技术专题】Vue3 - 生命周期
vue.js·vite
淘源码d2 天前
从0到1搭建医院随访系统:模块拆解 + 技术选型 + 部署方案
数据库·vue.js·源码·随访
Highcharts.js2 天前
Vue 3 + Highcharts Boost 可视化加速模块的完整示例
javascript·vue.js·可视化·boost·highcharts·图表渲染·加速模块
夏幻灵2 天前
从语法坑点到 JS 内存底层:Vue 3 watch 侦听器深度全解
开发语言·javascript·vue.js