vue&javascript点击空白处隐藏内容

2023-11-06

vue:

1.创建一个按钮和容器,按钮控制显示和隐藏,容器存放内容

<div @click.stop="isShow = true">显示</div>
<div v-show="isShow" v-clickoutside="handleClose">
    ...//代码
</div>

2.编写自定义指令

<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 {
        directives: { clickoutside },
        data() {
            return {
                isShow:false,
            }
        },
        methods:{
            handleClose(){
                this.isShow = false;
            }
        }
    }
</script>

javascript:

点击按钮,盒子显示,点击页面任何一个地方,盒子隐藏(阻止事件的冒泡,原生js)

<body>
    <!-- 点击按钮,盒子显示,点击页面任何一个地方,盒子隐藏 -->
    <button>点击</button>
    <div class="box">展示的内容</div>
</body>
<style>
      .box{
          width: 100px;
          height: 100px;
          background-color: skyblue;
          display: none;
      }  
</style>

<script>
    var btn = document.getElementsByTagName('button')[0]
    var box = document.getElementsByClassName('box')[0]

    // 因为事件有默认冒泡行为,当点击btn的时候,事件会冒泡到document上,
     所以只会隐藏,不会显示了        所以要阻止btn的冒泡行为
    // 如果要处理浏览器的兼容问题的话,封装一个函数阻止冒泡行为
    function stopP(ev){
        if(ev.stopPropagation){
            ev.stopPropagation() //标准浏览器
        }else{
            ev.cancelBubble = true //IE8及以下
        }
    }
    btn.onclick=function(ev){
        box.style.display = 'block'
        var ev = ev||event   //事件对象(IE和谷歌:是全局的event对象;火狐:是事件函数的第一个参数)
        stopP(ev)
    }
    document.onclick=function(ev){
       box.style.display = 'none'
    }
</script>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue&javascript点击空白处隐藏内容 的相关文章

随机推荐

  • 一个简单的Python网络爬虫教程

    网络爬虫是一种自动获取网页内容的程序 它可以从互联网上的网站中提取数据并进行分析 本教程将带您逐步了解如何使用 Python 构建一个简单的网络爬虫 注意 在进行网络爬虫时 请遵守网站的使用条款和法律法规 避免对目标网站造成不必要的负担 步
  • 关于实例分割的最新研究和进展,看这篇就够了!

    在计算机视觉领域 实例分割是一个很重要的研究主题 在地理信息系统 医学影像 自动驾驶 机器人等领域有着很重要的应用技术支持作用 具有十分重要的研究意义 本文综述基于实例分割的最新进展和发展历程 首先介绍了实例分割的基本逻辑 总结了目前主要研
  • MATLAB——生成周期矩形信号

    题目 周期矩形信号 一连续周期矩形信号频率为10Hz 信号幅度在 1 1之间 脉冲宽度与周期的比例是1 2 用128点采样 显示三个周期的信号波形 代码解释 f1 10 将频率赋值为 10 Hz 即信号的周期为 1 10 秒 Um 1 将幅
  • Qt使用多线程的一些心得——1.继承QThread的多线程使用方法

    文章目录 1 摘要 2 Qt多线程方法1 继承 QThread 2 1写一个继承于 QThread 的线程 2 2 QThread的几个函数quit exit terminate函数 2 3 正确的终止一个线程 2 4 如何正确启动一个线程
  • liu.四则运算库,模拟第三方库的编写,测试

    1 四则运算库 def add a b return float a b def subtracr a b return float a b def multipy a b return float a b def divide a b r
  • 2023高教社杯数学建模C题思路分析 - 蔬菜类商品的自动定价与补货决策

    1 赛题 在生鲜商超中 一般蔬菜类商品的保鲜期都比较短 且品相随销售时间的增加而变差 大部分品种如当日未售出 隔日就无法再售 因此 商超通常会根据各商品的历史销售和需 求情况每天进行补货 由于商超销售的蔬菜品种众多 产地不尽相同 而蔬菜的进
  • CSS技巧,CSS设置任何元素宽度随内容增加自动变宽

    宽度随内容增加自动变宽的问题 看起来简单 但网上各种找不到 其实感觉以前在布局的时候在哪里遇到过自动变宽 想了好久好像记得只有用table布局的时候吧 但是不可能哪里都用table 如果用层那怎么办呢 然后又发现了一个熟悉 display
  • 解决requests.exceptions.SSLError: HTTPSConnectionPool(host=xxxxx‘, port=443): Max retries exceeded

    问题描述 使用scrapy框架时报错SSL 于是另起一个文件 使用requests 报错requests exceptions SSLError HTTPSConnectionPool host xxx port 443 Max retri
  • Leetcode 121. 买卖股票的最佳时机

    买卖股票的最佳时机 给定一个数组 它的第 i 个元素是一支给定股票第 i 天的价格 如果你最多只允许完成一笔交易 即买入和卖出一支股票一次 设计一个算法来计算你所能获取的最大利润 注意 你不能在买入股票前卖出股票 示例 1 输入 7 1 5
  • 详解Unicode字符集以及字符编码实现(一)

    在日常生活中 我们经常会碰到打开一个文件 但是文件内容乱码的问题 比如我想看 西游记 这部小说 下载链接 https m ijjjxs com txt dl 35 12585 html 点击TXT电子书下载 很快就会下载完成 但是使用电脑自
  • npm ERR! chromedriver@2.46.0 install: `node install.js`

    vue项目npm install 时报错 如下 该问题是vue cli脚手架的一个bug 原因是chromedriver的部分文件被国内网络给墙掉了 无法下载完整的chromedirver包 解决办法 npm install chromed
  • 极限导数练习题

    f x sinx 2 x 当x趋近于0时 f x 的极限是0 f x sin x 2 x 当x趋近于0时 f x 的极限是0 f x sin 2x x 当x趋近于0时 f x 的极限是2
  • 利用python操纵数据库--数据写入与tkinter实现界面查询

    在日常练习sql的时候 又找不到好的线上数据库 这个时候不如自己下载一个mysql 但是数据批量写入呢 就可能是一个问题 这时候 利用python脚本批量写入即可 同时每次运行脚本也是一个麻烦的事 可以实现窗口输入 写到数据库中 这将在后面
  • centos7 开启网络连接

    1 当我们发现无法联网时 我们运行下面命令或者ping命令 ip addr 结果没有显示局域网的IP地址 2 我们去修改网卡配置文件 把网络连接打开 cd cd etc sysconfig network scripts vi ifcfg
  • 数据的清洗和检验(完全去重,缺失值的填充)

    一 完全去重 1 打开kettle工具 新建转换 gt 创建CSV文件输入控件 gt 1唯一行 哈希值 控件 gt 跳连接线 2 配置CSV文件输入控件 gt 进入CSV文件控制页面 如图所示 3 点击浏览 gt 选择完去重的文件merge
  • Hadoop学习笔记之在Eclipse中远程调试Hadoop

    转载地址 http itindex net detail 37273 hadoop E5 AD A6 E4 B9 A0 E7 AC 94 E8 AE B0 插件 话说Hadoop 1 0 2 src contrib eclipse plug
  • 记录一次cpu 100%线上问题排查

    功能问题 通过日志 单步调试相对比较好定位 性能问题 例如线上服务器CPU100 如何找到相关服务 如何定位问题代码 更考验技术人的功底 最近做项目时碰到线上某台实例不时出现CPU 100 的报警 线上部署了若干tomcat实例 即若干垂直
  • javase部分持续更新中...

    项目保存路径尽量不要出现中文 不要直接在磁盘目录下保存文件 注释 选中 Ctrl 关键字 学一个记一个 具有特殊含义的字 常量 程序运行过程中不可以改变的量 变量 在程序运行中可以改变的量叫做变量 int a 12 System out p
  • Unity 动画系统(Animation,Animator,Timeline)

    文章目录 1 Animation 1 1 创建Animation 1 2 Animation 属性 2 Animator 2 1 Animator 组件 2 2 Animation 状态 2 3 状态控制参数 2 4 代码中控制状态 3 代
  • vue&javascript点击空白处隐藏内容

    vue 1 创建一个按钮和容器 按钮控制显示和隐藏 容器存放内容 div 显示 div div 代码 div 2 编写自定义指令