vue3 切屏事件监听(考试防作弊)

7 篇文章 0 订阅

在这里插入图片描述

通过监听离开页面时时间戳和再次进来时的时间戳判断切屏时间,计算切屏次数

1、@vueuse

npm i @vueuse/core

import { ref, reactive, watch, onUnmounted } from "vue";
import { useDocumentVisibility } from "@vueuse/core";

// visibility 离开页面-hidden  进入页面-visible
const visibility = useDocumentVisibility();

// 切屏数据
const screenCutting = reactive({
	setTime: 3, // 设置切屏时间
	setNum: 3, // 设置切屏数量
	time: 0, // 实际时间
	num: 0, // 实际数量
});

// 监听 visibility 
const unwatch = watch(visibility, (current, previous) => {
	if (current === "hidden") {
		// 记住离开当前时间戳
	    screenCutting.time = new Date().getTime();
	}
	if (current === "visible" && previous === "hidden") {
		// 进来时间戳
		const currentTime = new Date().getTime();
		// 时间单位 s 
		const diff = (currentTime - screenCutting.time) / 1000;
		if (diff >= screenCutting.setTime) {
			// 切屏数量 + 1
			screenCutting.num += 1;
		}
	}
});

onUnmounted(() => {
	unwatch();
});

2、vant 自带 @vant/use

npm i @vant/use


import { watch } from 'vue';
import { usePageVisibility } from '@vant/use';

export default {
  setup() {
    const pageVisibility = usePageVisibility();

    watch(pageVisibility, (value) => {
      console.log('visibility: ', value);
    });
  },
};

3、原生

document.addEventListener("visibilitychange", function () {
  const state = document.visibilityState;

  if (state === "visible") {
    console.log("visible", new Date().getTime());
  } else if (state === "hidden") {
    console.log("hidden", new Date().getTime());
  }
});
  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值