vue 点击空白区域 盒子隐藏

方法一:指令实现

<template>
    <div>
        <div class="show" v-show="show" v-clickoutside="handleClose">我是要消失的Div</div>
    </div>
</template>

<script>
const clickoutside = {   // 初始化指令
    bind(el, binding, vnode) {
        function documentHandler(e) {
            // 这里判断点击的元素是否是本身,是本身,则返回
            if (el.contains(e.target)) {
                return false;
            }
            // 判断指令中是否绑定了函数
            if (binding.expression) {
                // 如果绑定了函数 则调用那个函数,此处binding.value就是handleClose方法
                binding.value(e);
            }
        }
        // 给当前元素绑定个私有变量,方便在unbind中可以解除事件监听
        el.__vueClickOutside__ = documentHandler;
        document.addEventListener('click', documentHandler);
    },
    update() {},
    unbind(el, binding) { // 解除事件监听
        document.removeEventListener('click', el.__vueClickOutside__);
        delete el.__vueClickOutside__;
    },
};
export default {
    name: 'HelloWorld',
    data() {
        return {
            show: true,
        };
    },
    directives: {clickoutside},
    methods: {
        handleClose(e) {
            this.show = false;
        },
    },
};
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
.show {
    width: 100px;
    height: 100px;
    background-color: red;
}
</style>

方法二:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>test</title>
    <script src="https://cdn.bootcss.com/vue/2.5.9/vue.js"></script>
  </head>
  <style media="screen">
  .box-container {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
  }
  .box{
    width: 200px;
    height: 200px;
    background-color: #999;
  }
  </style>
  <body>
    <div id="app">

      <div class="box-container" @click.self="toggleBox"> <!-- self的作用是阻止冒泡,点击box区域时,box不会消失 -->
        <div class="box" v-show="showBox">
          {{message}}
        </div>
      </div>
      
    </div>
  </body>

  <script>
  var app = new Vue({
    el: '#app',
    data: {
      message: '这是一个盒子',
      showBox: true
    },
    methods: {
      toggleBox: function() {
        this.showBox = false;  //通过控制showBox来控制box的显示与隐藏
      }
    }
    })
  </script>
</html>

 

您可以使用Vue的指令`v-show`或者`v-if`来实现点击页面让盒子显示和隐藏的效果。 方法一:使用v-show指令 您可以在页面中添加一个盒子,并为其绑定一个`click`事件,在事件处理函数中使用Vue的数据绑定来控制`v-show`的值。例如: ``` <template> <div> <div class="box" @click="showContent = !showContent">点击我显示/隐藏内容</div> <div class="content" v-show="showContent">这是要显示/隐藏的内容</div> </div> </template> <script> export default { data() { return { showContent: false } } } </script> ``` 在上面的代码中,我们定义了一个`showContent`变量来控制盒子的显示和隐藏。当点击盒子时,`showContent`的值会取反,从而实现显示和隐藏的效果。在`<div>`元素中使用了`v-show`指令来根据`showContent`的值来控制盒子的显示和隐藏。 方法二:使用v-if指令 您也可以使用`v-if`指令来实现点击页面让盒子显示和隐藏的效果。在这种方法中,您需要在模板中使用一个变量来控制盒子是否应该显示。例如: ``` <template> <div> <div class="box" @click="showContent = !showContent">点击我显示/隐藏内容</div> <div v-if="showContent" class="content">这是要显示/隐藏的内容</div> </div> </template> <script> export default { data() { return { showContent: false } } } </script> ``` 在上面的代码中,我们定义了一个`showContent`变量来控制盒子的显示和隐藏。当点击盒子时,`showContent`的值会取反,从而实现显示和隐藏的效果。在`<div>`元素中使用了`v-if`指令来根据`showContent`的值来控制盒子的显示和隐藏。 总结: 使用`v-show`和`v-if`指令都可以实现点击页面让盒子显示和隐藏的效果。但是,`v-show`只是简单地控制元素的显示和隐藏,而`v-if`则是根据条件动态地添加或删除元素。在某些情况下,使用`v-if`指令可能会更加灵活和高效。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值