JavaScript 锁定页面通常是指通过脚本使页面无法进行正常的用户交互,比如禁用鼠标点击、滚动、键盘输入等。这种技术在某些特定场景下有其应用,但也可能被用于恶意目的,如防止用户离开某个页面或强制用户观看广告。
锁定页面可以通过多种方式实现,比如:
contextmenu
事件并调用 event.preventDefault()
方法。user-select: none;
。overflow: hidden;
或监听滚动事件并阻止默认行为。以下是一个简单的示例,展示如何使用 JavaScript 和 CSS 锁定整个页面:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Lock Page Example</title>
<style>
body.locked {
overflow: hidden;
user-select: none;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
}
</style>
</head>
<body>
<button onclick="lockPage()">Lock Page</button>
<button onclick="unlockPage()">Unlock Page</button>
<script>
function lockPage() {
document.body.classList.add('locked');
document.addEventListener('contextmenu', preventDefault, false);
document.addEventListener('keydown', preventDefault, false);
}
function unlockPage() {
document.body.classList.remove('locked');
document.removeEventListener('contextmenu', preventDefault, false);
document.removeEventListener('keydown', preventDefault, false);
}
function preventDefault(e) {
e.preventDefault();
}
</script>
</body>
</html>
问题:页面锁定后,某些浏览器可能会显示一个不可见的滚动条,用户仍然可以通过键盘快捷键(如 Page Up/Down)滚动页面。
解决方法:除了禁用滚动事件,还可以通过设置 position: fixed;
和 top: 0; left: 0;
来确保页面不会滚动。
body.locked {
overflow: hidden;
user-select: none;
position: fixed;
top: 0;
left: 0;
width: 100%;
}
通过上述方法,可以在需要时有效地锁定页面,同时也要注意不要滥用此功能,以免给用户带来不便。