翼度科技»论坛 编程开发 JavaScript 查看内容

使用IntersectionObserver 实现:自动监听元素是否进入了设备的可视区域之

4

主题

4

帖子

12

积分

新手上路

Rank: 1

积分
12
IntersectionObserver (自动监听元素是否进入了设备的可视区域之内)

示例:
  1. const io = new IntersectionObserver(callback, option);
  2. // 获取元素
  3. const target = document.getElementById("dom");
  4. // 开始观察
  5. io.observe(target);
  6. // 停止观察
  7. io.unobserve(target);
  8. // 关闭观察器
  9. io.disconnect();
复制代码
vue示例:
  1. const className = 'enterpage';
  2. const directives = {
  3.   viewport: {
  4.     inserted: function (el, binding, vnode) {
  5.       // 设置观察器选项
  6.       const options = {
  7.         root: null, // 使用视窗作为根
  8.         rootMargin: '0px', // 根边界盒与目标边界盒之间的边距
  9.         threshold: 0.4 // 交叉比例(即目标元素的可见区域占比)
  10.       };
  11.       // 创建一个新的 Intersection Observer 实例
  12.       const observer = new IntersectionObserver((entries, observer) => {
  13.         // 遍历所有观察目标的条目
  14.         entries.forEach((entry) => {
  15.           // 如果目标元素的交叉比例大于 0(即部分可见)
  16.           if (entry.isIntersecting) {
  17.             console.log('可见了');
  18.             // 添加 class
  19.             el.classList.add(className);
  20.           }
  21.         });
  22.       }, options);
  23.       // 使用观察器观察目标元素
  24.       observer.observe(el);
  25.       // 组件销毁时停止观察
  26.       vnode.context.$once('hook:beforeDestroy', function () {
  27.         observer.unobserve(el);
  28.       });
  29.     },
  30.     unbind(el) {
  31.       // 移除 class
  32.       el.classList.remove(className);
  33.     }
  34.   }
  35. };
  36. export default directives;
复制代码
上面示例表示,当某个元素进入到可视范围内,给当前元素添加一个类名,这个类名可以给当前元素添加一些动画效果之类的。

来源:https://www.cnblogs.com/moqiutao/p/18412877
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具