详解vue中点击空白处隐藏div的实现(用指令实现)


Posted in Javascript onApril 19, 2018

简单想应该怎么实现?

1、肯定是给document增加一个click事件监听
2、当发生click事件的时候判断是否点击的当前对象
结合着本思路和指令咱们来实现。

简单介绍vue指令

一个指令定义对象可以提供如下几个钩子函数 (均为可选):

  1. bind:只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。
  2. inserted:被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)。
  3. update:所在组件的 VNode 更新时调用,但是可能发生在其子 VNode 更新之前。指令的值可能发生了改变,也可能没有。但是你可以通过比较更新前后的值来忽略不必要的模板更新 (详细的钩子函数参数见下)。
  4. componentUpdated:指令所在组件的 VNode 及其子 VNode 全部更新后调用。
  5. unbind:只调用一次,指令与元素解绑时调用。

接下来我们来看一下钩子函数的参数 (即 el、binding、vnode 和 oldVnode)。

详解vue中点击空白处隐藏div的实现(用指令实现)

代码实现

创建指令对象,分析放在代码中

<template>
 <div>
 <div class="show" v-show="show" v-clickoutside="handleClose">
  显示
 </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>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
禁止刷新,回退的JS
Nov 25 Javascript
jQuery调用AJAX时Get和post公用的乱码解决方法实例说明
Jun 04 Javascript
javaScript函数中执行C#代码中的函数方法总结
Aug 07 Javascript
jQuery动画效果-fadeIn fadeOut淡入浅出示例代码
Aug 28 Javascript
jQuery Validate表单验证深入学习
Dec 18 Javascript
jQuery formValidator表单验证
Jan 07 Javascript
AngularJS中$http服务常用的应用及参数
Aug 22 Javascript
老生常谈javascript的类型转换
Oct 12 Javascript
vue.js中mint-ui框架的使用方法
May 12 Javascript
十个免费的web前端开发工具详细整理
Sep 18 Javascript
详解vue中axios的封装
Jul 18 Javascript
vue-cli随机生成port源码的方法
Sep 02 Javascript
基于JS实现html中placeholder属性提示文字效果示例
Apr 19 #Javascript
JS实现的倒计时恢复按钮点击功能【可用于协议阅读倒计时】
Apr 19 #Javascript
JS使用setInterval实现的简单计时器功能示例
Apr 19 #Javascript
vue 实现通过手机发送短信验证码注册功能
Apr 19 #Javascript
详解react-redux插件入门
Apr 19 #Javascript
vuex state及mapState的基础用法详解
Apr 19 #Javascript
使用vuex的state状态对象的5种方式
Apr 19 #Javascript
You might like
DEDE实现转跳属性文档在模板上调用出转跳地址
2016/11/04 PHP
php 处理png图片白色背景色改为透明色的实例代码
2018/12/10 PHP
php实现根据身份证获取精准年龄
2020/02/26 PHP
jquery获得option的值和对option进行操作
2013/12/13 Javascript
js中this用法实例详解
2015/05/05 Javascript
JavaScript实现定时隐藏与显示图片的方法
2015/08/06 Javascript
CSS3 3D 技术手把手教你玩转
2016/09/02 Javascript
JavaScript实现简易的天数计算器实例【附demo源码下载】
2017/01/18 Javascript
AngularJS实现动态切换样式的方法分析
2018/06/26 Javascript
详解react组件通讯方式(多种)
2020/05/06 Javascript
详解JavaScript数据类型和判断方法
2020/09/04 Javascript
使用node-media-server搭建一个简易的流媒体服务器
2021/01/20 Javascript
编写Python脚本使得web页面上的代码高亮显示
2015/04/24 Python
详解Python中的__getitem__方法与slice对象的切片操作
2016/06/27 Python
详解Python中的动态属性和特性
2018/04/07 Python
在PyCharm中三步完成PyPy解释器的配置的方法
2018/10/29 Python
Python脚本利用adb进行手机控制的方法
2019/07/08 Python
python如何统计代码运行的时长
2019/07/24 Python
如何用OpenCV -python3实现视频物体追踪
2019/12/04 Python
Python中import导入不同目录的模块方法详解
2020/02/18 Python
keras 自定义loss层+接受输入实例
2020/06/28 Python
html5指南-7.geolocation结合google maps开发一个小的应用
2013/01/07 HTML / CSS
新西兰领先的内衣店:Bendon Lingerie新西兰
2018/07/11 全球购物
装饰活动策划方案
2014/02/11 职场文书
2014派出所所长群众路线对照检查材料思想汇报
2014/09/18 职场文书
免职证明样本
2014/10/23 职场文书
武当山导游词
2015/02/03 职场文书
2015年中学校长工作总结
2015/05/19 职场文书
2015社区健康教育工作总结
2015/05/20 职场文书
入党函调证明材料
2015/06/19 职场文书
房产遗嘱范本
2015/08/06 职场文书
2016年党员创先争优承诺书
2016/03/25 职场文书
详解MongoDB的条件查询和排序
2021/06/23 MongoDB
Win11安装升级时提示“该电脑必须支持安全启动”
2022/04/19 数码科技
解决MySQL报“too many connections“错误
2022/04/19 MySQL
Windows Server 修改远程桌面端口的实现
2022/06/25 Servers