标签:

效果实现:

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

html5 显示或隐藏 html点击隐藏_点击事件

打开菜单效果:给"新建“添加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,因此无法触发点击事件。

解决方法:

1.直接将点击事件绑定到可能点击到的最上层元素。

2.css调节z-index

首先要考虑的是更外层的元素遮挡了靠里层的元素。比如外层遮挡为一个div(.card)被遮挡的是一个input框为(.input-space)

这时就要把遮挡它的元素的css中的z-index调的比他要低,假设:外层遮挡的类名为:card,被遮挡的input的类名为:input-space。

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

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

.card{
pointer-events: none;
}