DOM元素的自动隐藏

Wesley13
• 阅读 731

在一些有悬浮元素的场景中,比如点击一个按钮弹出菜单后,点击菜单以外的地方,菜单应该被隐藏起来。隐藏的方式最好是自动隐藏,或至少是组件内的自动隐藏。

蒙层

比如,一个模态框组件(闭包实现)点击蒙层时,响应蒙层的点击事件,可以在事件处理函数中隐藏整个组件。在Vue和React等框架的组件中,这一点非常容易实现。

<div class="component">
    <div class="mask"></div> <!--蒙层-->
    <div class="content"></div> <!--内容-->
</div>


let component = document.querySelector('.component')
document.querySelector('.class').addEventListener('click', () => {
    component.style.display = 'none'
})

对于没有蒙层和不想使用蒙层的组件,也可以让document来监听点击事件:

<div class="component">
    <div class="content"></div> <!--内容-->
</div>


let component = document.querySelector('.component')
let content = document.querySelector('.content')
document.addEventListener('click', ev => {
    if(ev.target !== component && ev.target !== content){
        component.style.display = 'none'
    }
})

当点击元素不是现在正在交互的悬浮元素时,隐藏元素。用这个方法时需要注意监听函数的删除,切对于所有component内的元素都要一一判断,所以很不方便。

这两个方法的共同点时,在悬浮元素区域之外,需要另一个元素来接收点击事件,而不是悬浮元素自身来处理这个事件。

blur

那么有没有什么属性或方法能让元素自己知道自己之外的区域被点击了呢?那就是失焦(blur)事件。

像input等元素本身可以成为焦点,但是想div默认是不能获得焦点的,但是可以通过js设置tabIndex属性为-1来使得它可以获取焦点:

component.tabIndex=-1;

然后给元素添加失去焦点事件处理函数,隐藏元素:

component.addEventListener('blur',()=>
{
    component.style.display = 'none'
});

在元素显示时聚焦元素:

component.focus();

在点击悬浮元素区域以内的位置时,元素没有失去焦点,失焦事件不会触发。而点击悬浮元素区域以外时,元素失去焦点,失焦事件触发,元素自动隐藏。

这样,元素只需要设置自身就可以实现自动隐藏。

参考文献

tabindex - HTML(超文本标记语言) | MDN

点赞
收藏
评论区
推荐文章
风花雪月 风花雪月
3年前
tkinter中关闭函数的相关使用
tk中隐藏控件时,得出的结论!commandlambda:win.packforget()多窗口时,此命令只能生效一次commandwin.packforget()运行时,无显示commandwin.packforget多窗口时,此命令可以多次点击生效求教,界面只显示tk菜单当中的一个选项的窗口,如果有子窗口,就无法点击菜单选项?有知道的老铁,麻烦给个链接?!!先谢谢了!
Stella981 Stella981
3年前
React Portals
Portal提供了一种将子节点渲染到存在于父组件以外的DOM节点的优秀的方案。常见场景:对话框、悬浮卡以及提示框!定义一个模态框组件:importReact,{useRef,useEffect,}from'react';importReactDOMfrom'reactdo
Easter79 Easter79
3年前
Swing中事件的三种处理方法
 Swing是目前Java中不可缺少的窗口工具组,是用户建立图形化用户界面(GUI)程序的强大工具。JavaSwing组件自动产生各种事件来响应用户行为。如当用户点击按钮或选择菜单项目时,Swing组件会产生一个ActionEvent。Swing组件会产生许多事件,如ActionEvents,ChangeEvents,ItemEvents等,来响应用户的鼠
Wesley13 Wesley13
3年前
IOS中键盘自动隐藏
前言很多时候当我们在一个文本框中输入信息后,按了确认或者返回键需要隐藏键盘,或者在其他空白区域点击屏幕后也需要隐藏屏幕。这时肯定就需要让相应的控件响应Tap事件(点击事件),这样我们才能处理。实现隐藏的两种方法在IOS中有一个概念叫FirstResponder,意指第一响应者,也就是当前屏幕上,处于焦点状态的控件,它是第一响
Wesley13 Wesley13
3年前
Unity中EventTrigger使用
在Unity中,点击场景中的模型我们往往需要检测是否点击在了UI上,这时我们需要进行一系列的判断,往往效果还不好,因此我在场景中模型的点击也使用了EventTrigger,EventTrigger我们在UI上的使用比较常见,但是它也可以用于场景点击,并且能屏蔽点击到UI又响应了模型的点击事件,以下是点击事件的组件脚本usi
Stella981 Stella981
3年前
Google Chrome浏览器开发人员工具
准备工作要开始使用开发人员工具,请先下载GoogleChrome浏览器。在浏览器安装完成后,您可以打开自己感兴趣的网页或网络应用程序,然后通过下面任何一种方式进入开发人员工具:l 点击位于浏览器用户界面右上角的“页面”下拉菜单l 右键点击网页上的任一元素,在弹出菜单中选择“审查元素”。l 在Windows操作系统上,使用
铁扇公主 铁扇公主
1年前
Mac电脑版Bartender 最新激活安装包
Bartender是一款Mac电脑上的菜单栏管理工具,它旨在帮助用户管理和组织位于菜单栏的图标和快捷方式。以下是Bartender的一些常见特点和功能:图标隐藏:Bartender允许您隐藏菜单栏上的图标,以减少杂乱和占用空间。您可以将不常用的图标隐藏起来
绣鸾 绣鸾
1年前
Bartender 5 for mac(菜单栏图标管理软件)
是一款Mac上的菜单栏管理软件,它可以帮助用户轻松整理和管理菜单栏上的图标,使其更加整洁和有序。以下是Bartender的一些主要特点和功能:菜单栏图标隐藏:Bartender允许用户将一些不常用的菜单栏图标隐藏起来,只在需要时展示。通过隐藏冗杂的图标,您
流浪剑客 流浪剑客
1年前
专业PDF编辑软件:Acrobat Pro DC 2023 for mac 支持M1
是一款Mac上的菜单栏管理软件,它可以帮助用户轻松整理和管理菜单栏上的图标,使其更加整洁和有序。以下是Bartender的一些主要特点和功能:菜单栏图标隐藏:Bartender允许用户将一些不常用的菜单栏图标隐藏起来,只在需要时展示。通过隐藏冗杂的图标,您
京东云开发者 京东云开发者
8个月前
React memo的原理、实践与思考
前言在react中,对一个组件进行点击事件等操作时,该组件以及该组件的子组件都会重新渲染。避免组件的重新渲染一般可以借助React.memo、useCallback等来实现。什么是memomemo原理memo类似于class中pureComponent的特