美文网首页
vue 吸顶和吸底

vue 吸顶和吸底

作者: 小虾米前端 | 来源:发表于2021-04-29 16:41 被阅读0次

    1.顶吸

    需求:某个元素要在滚动列表的时候吸住顶部
     mounted() {
        window.addEventListener("scroll", this.suckTopFunc);
      },
      beforeDestroy() {
        window.removeEventListener("scroll", this.suckTopFunc);
      },
    methods:{
      suckTopFunc() {
     let offsetTop =
            window.pageYOffset ||
            document.documentElement.scrollTop ||
            document.body.scrollTop;
          //offsetTop是滚动条到顶部的距离
          if (offsetTop >= 110) {
           //在这里做操作
          } else {
          //在这里做操作
          }
      }
    }
    

    2.吸底

    需求:有个列表,但是底部需要自己加总计数据的div,并且始终处在底部
    思路:通过标识元素判断,视口是否显示到了列表的最下方,
    如果显示到了,则总计的盒子按照正常文档流显示,
    如果没有显示,则总计的盒子position:fixed到页面底部
    <ul>
    <li>1</li>
    <li>1</li>
    <li>1</li>
    <li>1</li>
    <li>1</li>
    ......
    </ul>
      // 这里可以加个标识用的元素,用来判断页面是否滚动到列表最下方
    <div class="tips" ref="tips"></div>
    <div :class="isFixed ? 'fixed-style' : ''">
    总计:5
    </div>
    data () {
    return {
    isFixed: false
      }
    },
       beforeDestroy() {
        window.removeEventListener("scroll", this.handlerScroll);
      },
    mounted(){
     this.$nextTick(() => {
          window.addEventListener("scroll", this.handlerScroll);
        });
     },
    methods:{
     handlerScroll() {
    //在这传入标识元素的节点,用$refs获取
          this.isFixed = this.isElementNotInViewport(this.$refs.tips) ? true : false;
        },
    
    // 在这判断,总计的div是否显示在页面中
     isElementNotInViewport (el) {
        let rect = el.getBoundingClientRect();
        return (
          rect.top >= (window.innerHeight || document.documentElement.clientHeight) ||
          rect.bottom <= 0
        );
      };
      }
    

    相关文章

      网友评论

          本文标题:vue 吸顶和吸底

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