在网页设计中,下拉菜单是非常常见的元素之一,然而用户关闭下拉菜单的方式却多种多样,其中一个比较普遍的场景就是点击网页其他区域,需要实现通过点击网页其他区域来关闭下拉菜单。本文将介绍如何使用 jQuery 实现这一功能。
实现原理
实现点击外部区域关闭下拉菜单的原理是在下拉菜单显示出来时,在页面上添加一个全屏幕蒙版,并监听该蒙版的点击事件,当蒙版被点击时关闭下拉菜单。
实现步骤
1. 布局HTML结构
首先我们需要在 HTML 中布局下拉菜单的结构和样式。下面是一个简单的示例:
---- ----------------- ------- ------------------------------------- --- ---------------------- ------ ---------------------- ------ ---------------------- ------ ---------------------- ----- ------
在上面的代码中,.dropdown
是一个包含下拉菜单的容器,.dropdown-toggle
是用于触发下拉菜单的按钮,.dropdown-menu
则是下拉菜单的内容。
2. 添加样式
为了让下拉菜单显示出来并且利于后续操作,我们需要添加一些 CSS 样式。以下是一个简单的示例:
--------- - --------- --------- -------- ------------- - ---------------- - ----------------- ----- ------- --- ----- ----- -------- --- ----- ------- -------- - -------------- - -------- ----- --------- --------- ---- ----- ----- -- -------- ---- ----------------- ----- ------- --- ----- ----- -------- ----- - -------------- -- - -------------- ---- - -------------- - - ------ ----- ---------------- ----- -
在上面的代码中,.dropdown
和 .dropdown-toggle
的样式用于布局下拉菜单的位置和触发下拉菜单的按钮的样式,.dropdown-menu
的样式用于设置下拉菜单的位置和样式。
3. 编写 jQuery 代码
下面是通过 jQuery 实现点击外部关闭下拉菜单的代码:
----------------------- --------------- - -- ---------------------- -- ---------------------------------------------- - --------------------------- - --- --------------------------------- ---------- - ----------------------------- ---
在上面的代码中,$(document).on('click'
监听整个文档的点击事件,如果点击的元素不在下拉菜单内,则关闭下拉菜单。.closest('.dropdown')
用于查找最近的 .dropdown
祖先元素。
.dropdown-toggle
的点击事件用于显示/隐藏下拉菜单。
示例代码
完整的示例代码如下:
--------- ----- ----- ---------- ------ ----- ---------------- ------------- ---- ---- ---- ------- -- -------- --------------- ------- --------- - --------- --------- -------- ------------- - ---------------- - ----------------- ----- ------- --- ----- ----- -------- --- ----- ------- -------- - -------------- - -------- ----- --------- --------- ---- ----- ----- -- -------- ---- ----------------- ----- ------- - ----------------------------------------------------------- -------- ---------------------------------------------------------------------------------------