详解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 相关文章推荐
跨浏览器通用、可重用的选项卡tab切换js代码
Sep 20 Javascript
关于JAVASCRIPT urldecode URL解码的问题
Jan 08 Javascript
简单的Jquery遮罩层代码实例
Nov 14 Javascript
javascript获取元素CSS样式代码示例
Nov 28 Javascript
使用微信内嵌H5网页解决JS倒计时失效问题
Jan 13 Javascript
详解node如何让一个端口同时支持https与http
Jul 04 Javascript
JavaScript实现时间表动态效果
Jul 15 Javascript
JavaScript实现写入文件到本地的方法【基于FileSaver.js插件】
Mar 15 Javascript
angularJS开发注意事项
May 26 Javascript
vue使用Google地图的实现示例代码
Dec 19 Javascript
通过实例解析js简易模块加载器
Jun 17 Javascript
vue2.0 获取从http接口中获取数据,组件开发,路由配置方式
Nov 04 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
php结合安卓客户端实现查询交互实例
2015/05/05 PHP
网站被黑的假象--ARP欺骗之页面中加入一段js
2007/05/16 Javascript
从阿里妈妈发现的几个不错的表单验证函数
2007/09/21 Javascript
Jquery AJAX 框架的使用方法
2009/11/03 Javascript
YUI的Tab切换实现代码
2010/04/11 Javascript
combox改进版 页面原型参考dojo的,比网上jQuery的那些combox功能强,代码更小
2010/04/15 Javascript
input 和 textarea 输入框最大文字限制的jquery插件
2011/10/27 Javascript
早该知道的7个JavaScript技巧
2013/03/27 Javascript
js 获取和设置css3 属性值的实现方法
2013/05/06 Javascript
Jquery 实现表格颜色交替变化鼠标移过颜色变化实例
2013/08/28 Javascript
yepnope.js使用详解及示例分享
2014/06/23 Javascript
JavaScript中的原型和继承详解(图文)
2014/07/18 Javascript
浅谈EasyUI中编辑treegrid的方法
2015/03/01 Javascript
js实现将选中内容分享到新浪或腾讯微博
2015/12/16 Javascript
JavaScript时间操作之年月日星期级联操作
2016/01/15 Javascript
Web前端新人笔记之jquery入门心得(新手必看)
2016/05/17 Javascript
JS从数组中随机取出几个数组元素的方法
2016/08/02 Javascript
JavaScript之DOM插入更新删除_动力节点Java学院整理
2017/07/03 Javascript
微信小程序tabBar模板用法实例分析【附demo源码下载】
2017/11/28 Javascript
python @property的用法及含义全面解析
2018/02/01 Python
在python win系统下 打开TXT文件的实例
2018/04/29 Python
Python数据结构之图的应用示例
2018/05/11 Python
Python基于pyecharts实现关联图绘制
2020/03/27 Python
使用python对excel表格处理的一些小功能
2021/01/25 Python
使用canvas绘制超炫时钟
2014/12/17 HTML / CSS
澳大利亚便宜的家庭购物网站:CrazySales
2018/02/06 全球购物
eDreams加拿大:廉价航班、酒店和度假
2019/03/29 全球购物
编码转换,怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串
2014/01/07 面试题
物业管理委托协议(2篇)
2014/09/23 职场文书
先进事迹材料怎么写
2014/12/30 职场文书
社区党支部公开承诺书
2015/04/29 职场文书
三好学生竞选稿
2015/11/21 职场文书
机关单位2016年创先争优活动总结
2016/04/05 职场文书
MySQL之DML语言
2021/04/05 MySQL
Python3 多线程(连接池)操作MySQL插入数据
2021/06/09 Python
Python编写nmap扫描工具
2021/07/21 Python