今天分享一个考试防止切屏作弊的功能
需求
效果如动图:
需求描述:不难看出,这是只要考试页面不在当前页面的都会被看做是切屏,当超过设置的考试切屏允许的最大次数时(在考试管理里面会有这个功能),就会自动交卷停止作答。
关键点1:在vue生命周期mounted钩子里面,添加一个监听页面可见或不可见的事件visibilitychange
关键点2:为visibilitychange事件绑定一个函数,在此函数中获取页面元素的状态document.visibilityState
关键点3:调用后台接口,获取在考试管理中是否设置了开启可切屏功能,以及可切屏的最大次数和还剩余多少次的数据(还剩多少次切屏这个是调用接口获取的,每切屏一次调用一次接口,后台老哥去处理一次,其实完全也可以前端来做)
HTML结构
<el-dialog title="提示" :visible.sync="tipsFlag" width="480px" class="commonDialog multi clickLight" center :close-on-click-modal="false">
<div class="dialogTipsbox" v-if="tips===1">你还有试题未作答,确认要交卷?</div>
<div class="dialogTipsbox" v-if="tips===2">
最多只能切屏{
{
switchPage.switchPageTimes}}次,你还可切换{
{
switchPage.remaTimes}}次,
<br />
超过{
{
switchPage.switchPageTimes}}次将强行交卷!
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="tipsFlag = false" v-if="tips===1">取 消</el-button>
<el-button type="primary" @click="onConfirmTip" v-if="tips===1">