头部导航组件弹出层


1、定义一个自定义指令title

  <header v-title>
      <i class="iconfont icon-back"></i>
      <span>11111</span>
    </header>

2、在该页面引入vue

import Vue from "vue";

3、创建title指令,并测试一下

Vue.directive("title", {
  inserted(el) {
    console.log(el)
  },
});

得到整个节点

4、设置显示/隐藏

Vue.directive("title", {
  inserted(el) {
    // console.log(el)
    el.style.display = "none";
    window.onscroll = () => {
      if ((document.documentElement.scrollTop || document.body.scrollTop) > 40) {
        el.style.display = "block";
      } else {
        el.style.display = "none";
      }
    };
  },
  unbind() {
    window.onscroll = null;
  }
});

因为在此页面定义的scroiiTop一旦使用的话会在别的页面被继承使用,所以要在unbind钩子函数中设置为null

5、以下为如何封装(不考虑封装的可以忽略)

5.1定义一个title并传入想要的距离的值

<header v-title='100'>
  <i class="iconfont icon-back"></i>
  <span>11111</span>
</header>

5.2在until下创建scrollTop.js,写入

import Vue from "vue";
Vue.directive("title", {
  inserted(el,bind) {
    // console.log(el)
    console.log(bind.value)
    el.style.display = "none";
    window.onscroll = () => {
      if ((document.documentElement.scrollTop || document.body.scrollTop) > bind.value) {
        el.style.display = "block";
      } else {
        el.style.display = "none";
      }
    };
  },
  unbind() {
    window.onscroll = null;
  }
});
 

title中还有一个bind属性,可以获取传入的值(上步骤的100值)

5.3在main.js中引入一下

import '@/until/scrollTop'  //引入吸顶
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值