Vue 使用getBoundingClientRect()判断某个元素是否在可视区域

场景:判断某个元素是否出现了可视区域,根据是否在可视区域来执行不同动作;

比如第一屏未出现支付按钮时,显示底部悬浮按钮,当页面下滑出现支付按钮,则底部悬浮按钮消失。

@/utils/index.js

/**
 * 判断某个原生DOM元素是否不在屏幕可见区内
 * @param {*} el 原生DOM元素
 */
const isElementNotInViewport = function(el) {
  let rect = el.getBoundingClientRect();
  return (
    rect.top >= (window.innerHeight || document.documentElement.clientHeight) ||
    rect.bottom <= 0
  );
};

export { isElementNotInViewport};

isElementNotInViewport在组件内的使用:

import { isElementNotInViewport} from "@/utils/index.js";

  mounted() {
    this.$nextTick(() => {
      let timer;
      window.addEventListener("scroll", () => {
        if (this.isFixed) {
          this.isFixed = false;
        }
        if (timer) {
          clearTimeout(timer);
        }
        timer = setTimeout(() => {
          this.handleScroll();
        }, 200);
      });
      this.handleScroll();
    });
  },
  methods: {
      // 滑动出现底部按钮
    handleScroll() {
      if (isElementNotInViewport(this.$refs.lightBtn)) {
        this.isFixed = true;
      } else {
        this.isFixed = false;
      }
    },
  }

相关参考链接:
Element.getBoundingClientRect()

只是简单小记,如有错误望指出,互相学习,共同进步~

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容