JavaScript——除指定区域外点击任何地方隐藏DIV

效果实现:

点击按钮菜单出现:                                    点击菜单外则收起菜单:

打开菜单效果:给"新建“添加onclick属性,使菜单display="block"显现

关闭菜单效果:使菜单display="none"隐藏

全部代码(代码之后有详解):

    document.addEventListener("click",clickHidden);//所有组件添加点击事件

    var mn=document.getElementById('menu');//获取菜单节点,菜单id为menu
    function clickHidden(eve)
    {
        if( eve.target.id!="menu" )//点击的如果不是菜单,菜单隐藏。如果是菜单,菜单显现
    	mn.style.display="none";
    }

我们如何判断是否点击了菜单之外的地方呢?

这里我们想到一个办法,给窗体所有组件添加事件,当点击时,使菜单display="none"。当点击的是菜单时,便使菜单display="block"

这里我们使用到的方法是addEventListener()

语法

element.addEventListener(event, function, useCapture)
参数     描述
event

必须。字符串,指定事件名。

注意: 不要使用 "on" 前缀。 例如,使用 "click" ,而不是使用 "onclick"。

提示: 所有 HTML DOM 事件,可以查看我们完整的 HTML DOM Event 对象参考手册。HTML DOM Event对象参考手册

function

必须。指定要事件触发时执行的函数。

当事件对象会作为第一个参数传入函数。 事件对象的类型取决于特定的事件。例如, "click" 事件属于 MouseEvent(鼠标事件) 对象。

useCapture 可选。布尔值,指定事件是否在捕获或冒泡阶段执行。

可能值:
  • true - 事件句柄在捕获阶段执行
  • false- false- 默认。事件句柄在冒泡阶段执行

我们需要监听全页面的单击事件,所以我们的对象是document

document.addEventListener("click",clickHidden);

这里我们注意有个问题:

当你给一个div设置了点击方法,这个div中还有其他元素。

那么实际点击的时候,并没有点击到目的div,因此无法触发点击事件。

解决方法:

方法一:直接将点击事件绑定到可能点击到的最上层元素。

方法二:css调节z-index

首先要考虑的是更外层的元素遮挡了靠里层的元素。比如外层遮挡为一个div(.card)被遮挡的是一个input框为(.input-space)
这时就要把遮挡它的元素的css中的z-index调的比他要低,假设:外层遮挡的类名为:card,被遮挡的input的类名为:input-space。

.card{
    z-index:1;
}
.input-space{
    z-index:2;
}

方法三:写完之后看input框能不能选到(点击事件生不生效)。如果还是选不到(点击事件不生效),就在这个基础上为card再加一层css, pointer-events:none,此css以为鼠标事件对当前元素无效。

.card{
    pointer-events: none;
}

猜你喜欢

转载自blog.csdn.net/qq_36470686/article/details/83037430