【通俗易懂】vue点击按钮显示隐藏另一个元素,并且实现点击空白区域隐藏另一个元素功能

功能讲解

网上看到很多帖子都是答非所问,或者给的解决办法只有一半,根本不是我要得功能。

我要的功能是:有一个按钮,有一个页面,我点击按钮的时候页面可以显示,再点击可以隐藏,一直循环。同时页面显示的时候点击页面区域是不会关闭的,但是点击页面区域之外的地方就会把页面关闭。类似于elementul弹框的那种点击空白处或者点击遮罩层直接关闭弹框的效果

上代码

html部分:这里注意一个是按钮,一个是显示页面,我们之所以可以点击之外的区域可以隐藏,是在外面包了一个div,div上写的v-cloak v-clickoutside="outsideClose"这个是重点

    <!-- 点击按钮可以显示隐藏,点击显示的区域不关闭,如果点击的是显示区域之外的地方关闭显示区域 -->
    <div v-cloak v-clickoutside="outsideClose">
      <div @click="show = !show">按钮</div>
      <div v-show="show">显示</div>
    </div>

js部分:这里注意clickoutside这个方法就是通过上面divv-clickoutside="outsideClose"绑定的,所以不要纠结为什么没有获取元素之类的。我看网上帖子好多都是就发了一个方法,然后也没解释,下面评论都在问这个方法不用绑定元素吗之类的。这不是坑新人吗。

<script>
export default {
  data() {
    return { 
      //这个是显示隐藏的变量
      show: true
       };
  },
  //这个是主要用来判断是不是区域外的方法
  directives: {
    clickoutside: {
      //初始化,这边判断是否是区域之外
      bind(el, binding, vnode) {
        function documentHandler(e) {
          if (el.contains(e.target)) {
            return false;
          }
          if (binding.expression) {
            binding.value(e);
          }
        }
        function KeyUp(e) {
          if (e.keyCode == 27) {
            if (binding.expression) {
              binding.value(e);
            }
          }
        }
        el.__vueClickOutSize__ = documentHandler;
        el.__vueKeyup__ = KeyUp;

        document.addEventListener("keyup", KeyUp);
        document.addEventListener("click", documentHandler);
      },
      //销毁事件监听
      unbind(el, binding) {
        document.removeEventListener("click", el.__vueClickOutSize__);
        delete el.__vueClickOutSize__;

        document.removeEventListener("keyup", el.__vueKeyup__);
        delete el.__vueKeyup__;
      },
    },
  },
  methods: {
    //如果是区域外调用方法隐藏页面
    outsideClose() {
      this.show = false;
    },
  },
};
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

接口写好了吗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值