我们为什么要使用锁屏功能,因为锁屏功能可以帮助我们进行隐私的保护
锁屏功能的制作方法
1.我们要获取到登录成功密码输入框的内容,还要获取到登录成功之后返回的账户信息,在登录成功的时候,通过存储,存储一下密码框的value和登录成功之后返回的账户信息
下面的代码是在登录成功之后,存储一下密码,在锁屏页面解锁的时候使用
// 存储密码到后面的锁屏使用
localStorage.setItem("pass", $("#password").val());
下面的代码是在登录成功之后,存储一下登录成功返回的账户信息,用于在其他页面获取数据,验证账号是否掉线
//把整条数据存储起来到后面使用
localStorage.setItem("data", JSON.stringify(data));
这是在登录页点击登录触发的事件,里面有上面两个事件具体放在哪个位置去使用
//点击登录事件
function enter() {
//开屏弹窗
let tooltip = $(".Tooltip")[0];
//判断是否填写账号和密码
if ($("#account").val() == "") {
tooltip.innerHTML = `请填写账号`;
tooltip.style = "display:block";
//判断账号格式是否错误
} else if (!isValidPhoneNumber($('#account').val())) {
tooltip.innerHTML = `账号格式错误`;
tooltip.style = "display:block";
// 判断是否填写密码
} else if ($("#password").val() == "") {
tooltip.innerHTML = `请填写密码`;
tooltip.style = "display:block";
//判断密码格式是否错误
} else if ($('#password').val().length < 6 || $('#password').val().length > 18) {
tooltip.innerHTML = `密码格式错误`;
tooltip.style = "display:block";
} else {
//请求接口
$.ajax({
url: interfaces + 'spigall/Userinfo',
method: 'POST',
dataType: 'json',
data: {
//把获取到的手机号和密码框的value值放入到数据里面进行判断
account: $("#account").val(),
password: $("#password").val()
},
success: function(data) {
// 当请求成功时执行的回调函数
//判断接口返回的账户是否存在
if (data.code == 0) {
tooltip.innerHTML = `账户密码错误`;
tooltip.style = "display:block";
//判断接口返回的密码是否错误
} else {
// 存储接口
localStorage.setItem('dns', interfaces);
//登陆成功弹出窗提示
tooltip.innerHTML = `登录成功`;
//修改弹出窗的样式
tooltip.style = "display:block;background:#e8f5e9;color:#67c23a;";
//把整条数据存储起来到后面使用
localStorage.setItem("data", JSON.stringify(data));
// 存储密码到后面的锁屏使用
localStorage.setItem("pass", $("#password").val());
//设置定时器
setTimeout(function() {
//跳转到首页
window.location.replace("index.html");
}, 2000)
}
// 可以在这里处理获取到的数据,更新页面内容等操作
},
error: function(xhr, status, error) {
// 当请求失败时执行的回调函数
console.error('请求失败:', status, error);
// 可以在这里处理请求失败的情况,例如显示错误信息给用户
}
});
}
//设置定时器
setTimeout(function() {
//让弹出窗隐藏
tooltip.style = "display:none";
}, 2000)
}
在框架和锁屏页面,获取提示的弹出窗元素要放在最上面否则获取不到弹出窗的元素,使用变量获取到账号的信息 ,写在获取提示弹出窗元素的下面,先判断变量是否为空,如果为空,跳转到登录页
// 获取提示弹出窗
let tooltip = $(".Tooltip")[0]; // 获取提示信息的 DOM 元素
// 获取本地存储登录的数据
let tokens = localStorage.getItem("data");
// 判断数据如果为null返回登录页
function disconnected() {
tokens = localStorage.getItem("data");
if (tokens == null) {
// 弹出窗提示
tooltip.innerHTML = `您已掉线,两秒将返回登录页面`; // 设置提示信息
// 显示弹出窗
tooltip.style = "display:block";
// 定时器跳转到登录页
setTimeout(function() {
console.log(1);
// 清除临时存储的数据
sessionStorage.clear();
// 清除本地存储的数据
localStorage.clear();
// 跳转到登录页
window.location.replace("login.html");
}, 2000);
}
}
然后请求首页的接口判断token是否失效,如果失效弹出窗提示用户跳转到登录页
// 数据转换
let personal = JSON.parse(tokens);
// 获取存储登录页数据里面的id
let uid = personal.data.id;
// 获取登录页数据的token
let token = personal.data.token;
// 获取本地存储的接口
let dns = localStorage.getItem('dns');
// 请求首页接口
function showdata() {
$.ajax({
type: "post",
url: dns + "/spigall/Statis",
data: {},
headers: {
token: token,
id: uid
},
success: function(data) {
// 判断token是否过期
if (data.code == 0) {
// 弹出窗显示
tooltip.style = "display:block";
// 弹出窗渲染
tooltip.innerHTML = `您已掉线,两秒将返回登录页面`; // 设置提示信息、
// 定时器跳转到登录页
setTimeout(function() {
// 清除临时存储的数据
sessionStorage.clear();
// 清除本地存储的数据
localStorage.clear();
// 跳转到登录页
window.location.replace("login.html");
}, 2000);
}
},
error: function(e) { // 请求失败的回调函数
console.error("请求失败", e);
}
})
}
然后设置一个永久定时器调用这两个函数进行判断
// 每五秒执行定时器
setInterval(function() {
//判断数据是否丢失,如果丢失,弹出窗提示跳转到登录页
disconnected();
// 请求首页接口判断,token是否失效
showdata();
}, 5000);
2.在后台框架点击锁屏按钮,存储一个变量,设置它值为1,设置这个存储的变量是为了在显示框架页面的时候,判断是否有这个存储,如果有这个存储的变量,跳转到到锁屏页面,否则不跳转页面,点击锁屏跳转到锁屏页面,进入锁屏判断存储变量的值是否等于2,如果等于2跳转到框架页面
下面是在框架页面点击锁屏图片的代码
// 点击锁屏函数
function lock() {
// 存储一个数据为1
localStorage.setItem('locks', 1);
// 创建一个新的状态对象newState,它包含了两个属性
// pageTitle属性用于表示页面标题,这里设置为"lock.html"
// pageContent属性用于描述页面的内容,这里设置了相关的描述字符串
var newState = {
pageTitle: "lock.html",
pageContent: "这是新的页面内容相关描述"
};
// 使用history.replaceState方法来更新浏览器历史记录中的当前状态
// 第一个参数newState就是上面定义的新状态对象,它包含了页面相关的一些状态信息
// 第二个参数"新页面标题"是一个可选的标题参数,用于在某些浏览器的历史记录中展示相关标题(不过实际支持情况因浏览器而异)
// 第三个参数"lock.html"指定了与该历史记录状态关联的URL路径,当用户点击浏览器的前进/后退按钮时可能会用到这个路径信息
history.replaceState(newState, "新页面标题", "lock.html");
// 使用location.reload方法来重新加载当前页面,这会导致页面重新从服务器获取资源(如果是无缓存情况)
// 或者从缓存中重新加载页面内容(如果有可用缓存),常用于需要更新页面显示状态的场景
location.reload();
}
下面是在框架的js里面,判断存储的值是否为1,如果为1跳转到锁屏页面
// 如果获取的存储为1跳转到锁屏页面
if (localStorage.getItem('locks') == 1) {
window.location.replace('lock.html');
}
下面代码是写锁屏页面写的,在锁屏页面判断存储的值如果等于2跳转到框架页面
// 判断存储的值如果等于2,就跳转到锁屏之前的页面
if (localStorage.getItem('locks') == 2) {
window.location.replace("index.html");
}
3.点击解锁功能,判断是否填写密码,没有填写弹出窗提示用户请填写密码,否则判断输入的内容的格式是否为大于等于6小于等于18,这是我自己写的规则,当然也可以通过自己格式进行密码格式判断的修改或者也可以去除这个不是必要的,不是弹出窗提示用户格式错误,否则最后判断输入的内容是否跟存储的登录密码一样,如果不一样弹出窗提示用户密码错误,否则弹出窗提示用户解锁成功,跳转到框架页面
下面是点击解锁事件和监听的回车事件
这个事件是放在锁屏的js里面去写的
// 点击解锁事件
function lockhiode() {
// 如果密码输入框的值为空,弹出窗提示
if ($("#password").val() == "") {
// 设置弹出窗的提示信息
tooltip.innerHTML = `请填写密码`;
// 显示弹出窗
tooltip.style = "display:block";
//判断密码格式是否错误
} else if ($('#password').val().length < 6 || $('#password').val().length > 18) {
// 设置弹出窗的提示信息
tooltip.innerHTML = `密码格式错误`;
// 显示弹出窗
tooltip.style = "display:block";
// 如果密码和本地存储的登录密码不一样,弹出窗提示
} else if ($('#password').val() != localStorage.getItem('pass')) {
// 设置弹出窗的提示信息
tooltip.innerHTML = `密码错误`;
// 显示弹出窗
tooltip.style = "display:block";
// 如果上面条件都不满足,弹出窗提示,跳转到锁屏之前的页面
} else {
// 设置密码框为空
$('#password').val("");
// 设置提示弹出窗信息
tooltip.innerHTML = `解锁成功`;
// 显示提示弹出窗改变弹出窗的颜色
tooltip.style = "display:block;background:#e8f5e9;color:#67c23a;";
// 设置lock存储为1
localStorage.setItem('lock', 1)
// 设置locks存储为2
localStorage.setItem('locks', 2);
// 设置定时器。跳转到锁屏之前的页面
setTimeout(function() {
// 跳转到锁屏之前的页面
window.location.replace('index.html');
}, 2000)
}
//设置定时器
setTimeout(function() {
//让弹出窗隐藏
tooltip.style = "display:none";
}, 2000)
}
// 监听回车键
$(document).ready(function() {
// 在密码框监听键盘事件
$('#password').keypress(function(event) {
// 如果键盘点击回车执行里面的内容
if (event.which === 13) {
event.preventDefault(); // 防止表单默认提交
lockhiode(); // 调用解释函数
}
});
});