美文网首页vue的套路
Vue 使用getBoundingClientRect()判断某

Vue 使用getBoundingClientRect()判断某

作者: 前端葱叶 | 来源:发表于2020-05-01 19:22 被阅读0次

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

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

    @/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()

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

    相关文章

      网友评论

        本文标题:Vue 使用getBoundingClientRect()判断某

        本文链接:https://www.haomeiwen.com/subject/asoqghtx.html