
本文旨在提供一种通用的 javaScript 弹窗函数解决方案,避免重复编写类似代码。通过将弹窗 ID 作为参数传递,并结合classlist的添加和移除功能,实现一个可复用的弹窗控制函数,简化弹窗功能的开发和维护。
在前端开发中,弹窗功能非常常见。如果每个弹窗都编写独立的打开和关闭函数,会导致代码冗余且难以维护。本文将介绍如何创建一个通用的 javascript 函数来控制多个弹窗的显示与隐藏,从而提高代码的可复用性和可维护性。
实现思路
核心思想是将弹窗的 ID 作为参数传递给一个通用的函数。该函数首先获取对应的弹窗元素和遮罩层元素,然后检查弹窗是否已经处于打开状态。如果是,则移除相应的 css 类,关闭弹窗;否则,添加相应的 CSS 类,打开弹窗。
立即学习“Java免费学习笔记(深入)”;
代码实现
function setActivePopup(popupId) { const popup = document.getElementById(popupId); const overlay = document.getElementById("overlay"); if (popup.classList.contains("open-popup")) { popup.classList.remove("open-popup"); overlay.classList.remove("overlay"); } else { popup.classList.add("open-popup"); overlay.classList.add("overlay"); } }
代码解释
- setActivePopup(popupId):定义一个名为 setActivePopup 的函数,接受一个参数 popupId,表示要控制的弹窗的 ID。
- const popup = document.getElementById(popupId);:通过 document.getElementById() 方法获取 ID 为 popupId 的弹窗元素,并将其赋值给变量 popup。
- const overlay = document.getElementById(“overlay”);:通过 document.getElementById() 方法获取 ID 为 “overlay” 的遮罩层元素,并将其赋值给变量 overlay。这里假设所有弹窗都使用同一个遮罩层。
- if (popup.classList.contains(“open-popup”)) { … } else { … }:使用 classList.contains() 方法检查 popup 元素是否已经包含名为 “open-popup” 的 CSS 类。
- 如果包含,则表示弹窗已经打开,需要关闭。使用 classList.remove() 方法移除 “open-popup” 类和 “overlay” 类,从而关闭弹窗和移除遮罩层。
- 如果不包含,则表示弹窗尚未打开,需要打开。使用 classList.add() 方法添加 “open-popup” 类和 “overlay” 类,从而打开弹窗和显示遮罩层。
使用示例
setActivePopup("popup-1"); // 打开或关闭 ID 为 "popup-1" 的弹窗 setActivePopup("popup-2"); // 打开或关闭 ID 为 "popup-2" 的弹窗
只需要调用 setActivePopup() 函数,并传入相应的弹窗 ID,即可控制弹窗的显示与隐藏。
html 结构示例
<div id="popup-1" class="popup"> <!-- 弹窗内容 --> </div> <div id="popup-2" class="popup"> <!-- 弹窗内容 --> </div> <div id="overlay" class="overlay"></div>
CSS 样式示例
.popup { display: none; /* 默认隐藏弹窗 */ /* 其他样式 */ } .popup.open-popup { display: block; /* 添加 "open-popup" 类后显示弹窗 */ /* 其他样式 */ } .overlay { display: none; /* 默认隐藏遮罩层 */ position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.5); /* 半透明黑色背景 */ z-index: 999; /* 确保遮罩层在弹窗下方 */ } .overlay.overlay { display: block; /* 添加 "overlay" 类后显示遮罩层 */ }
注意事项
- 确保 HTML 结构中存在 ID 为 “overlay” 的遮罩层元素。
- CSS 样式中定义了 .popup 和 .overlay 类的默认样式,以及 .open-popup 类的显示样式。
- 可以根据实际需求修改 CSS 类名和样式。
- 此方法适用于所有弹窗都使用同一个遮罩层的情况。如果每个弹窗需要独立的遮罩层,则需要在 setActivePopup() 函数中获取对应的遮罩层元素。
总结
通过使用通用的 JavaScript 函数来控制弹窗的显示与隐藏,可以避免代码冗余,提高代码的可复用性和可维护性。本文提供了一种简单的实现方案,可以根据实际需求进行扩展和修改。这种方法不仅可以应用于弹窗,还可以应用于其他需要动态添加和移除 CSS 类的场景,例如选项卡、导航菜单等。


