📅  最后修改于: 2023-12-03 14:55:52.815000             🧑  作者: Mango
模态形式引导程序是一种让用户更加易于使用的引导程序。它强制用户在完成引导前必须完成一些操作,同时把注意力集中在当前的任务上,避免用户被其他干扰分心。
要实现模态形式引导程序,我们需要使用一个通用的方法:将一些组件用div
封装起来,添加modal
类以及display:none
属性,用Javascript控制其显示或隐藏。
<div class="modal" style="display:none;">
<!-- 这里放置弹出页面的html代码 -->
</div>
// 控制显示或隐藏函数
function showModal(modal) {
modal.style.display = "block";
}
function hideModal(modal) {
modal.style.display = "none";
}
但是,单单封装是远远不够的。模态形式引导程序还需要实现一些关键的功能。
要实现遮罩效果,我们需要在页面上添加遮罩层(灰色这样默认颜色)。这样可以让用户专注于弹出页面,将注意力从背景明显减弱。
<div class="modal-background">
<div class="modal" style="display:none;">
<!-- 这里放置弹出页面的html代码 -->
</div>
</div>
我们需要在modal-background
上添加样式,这样就能实现遮罩效果。
.modal-background {
position: fixed; /* 关键:控制在可视窗口内固定位置 */
top: 0;
bottom: 0;
left: 0;
right: 0;
background-color: rgba(0, 0, 0, 0.5); /* 半透明效果 */
}
当用户完成弹出页面的任务后,需要有一个便利的方式来关闭弹出页面。推荐的方式是使用一个X
符号来表示关闭。
<div class="modal-background">
<div class="modal" style="display:none;">
<div class="modal-close">×</div> <!-- 关闭按钮 -->
<!-- 这里放置弹出页面的html代码 -->
</div>
</div>
我们需要在modal-close
上添加样式,这样就能实现关闭按钮。
.modal-close {
position: absolute; /* 关键:控制位置 */
top: 0;
right: 0;
padding: 10px;
font-size: 24px;
color: rgba(255, 255, 255, 0.8);
cursor: pointer;
}
当用户在弹出页面上使用键盘时,我们需要为他们提供一个避免意外退出的方法。常用的方法是使用ESC
键来关闭弹出页面。
// 键盘事件触发函数
function onkeydown(event) {
if (event.keyCode == 27) { // 按下ESC键
hideModal(document.querySelector("modal"));
}
}
// 注册事件
window.addEventListener("keydown", onkeydown);
在一个页面上可能存在多个弹出页面,这就需要维护一个堆栈,每次打开页面时入栈,关闭时出栈。
// 初始化空堆栈数组
var modals = [];
// 打开弹出页面
function showModal(modal) {
modal.style.display = "block";
modals.push(modal);
}
// 关闭弹出页面
function hideModal(modal) {
modal.style.display = "none";
modals.pop();
}
// ESC键关闭最上方的弹出页面
function onkeydown(event) {
if (event.keyCode == 27) { // 按下ESC键
hideModal(modals[modals.length - 1]);
}
return true;
}
// 点击遮罩层关闭最上方的弹出页面
document.querySelector(".modal-background").addEventListener("click", (event) => {
event.stopPropagation(); // 防止被模态框的点击事件处理
hideModal(modals[modals.length - 1]);
});
模态形式引导程序在用户引导方面的使用已经非常广泛了。如果你还没有使用过,那么现在是时候去尝试一下了!