当前位置: 首页 > news >正文

React实现H5手势密码

在这里插入图片描述

监测应用进入前后台

在JavaScript中,监听H5页面是否在前台或后台运行,主要依赖于Page Visibility API。这个API在大多数现代浏览器中都是支持的,包括苹果的Safari和谷歌的Chrome(也就基本覆盖了Android和iOS平台)。下面是一个简单的示例代码,展示如何使用这个API来判断页面的可见性状态:

// 页面可见性变化时触发的事件处理函数
function handleVisibilityChange() {if (document.visibilityState === 'hidden') {// 当页面进入后台时的操作console.log('页面进入后台');} else if (document.visibilityState === 'visible') {// 当页面从后台回到前台时的操作console.log('页面从后台回到前台');}
}// 给文档添加可见性状态变化的监听器
document.addEventListener('visibilitychange', handleVisibilityChange);// 初始化时检查一次页面状态
handleVisibilityChange();

这段代码首先定义了一个handleVisibilityChange函数,该函数会在页面的visibilityState发生变化时被调用。visibilityState可以是visiblehiddenprerenderunloaded等值,这里我们主要关注visiblehidden两种状态,分别代表页面在前台和后台。

然后,通过document.addEventListener给文档注册了一个监听器,用于监听visibilitychange事件。最后,调用一次handleVisibilityChange函数来初始化检查页面当前的状态。

需要注意的是,虽然大部分现代浏览器支持Page Visibility API,但还是存在一些老旧浏览器可能不支持。因此,在生产环境中使用时,最好进行特性检测以确保兼容性:

if (typeof document.hidden !== "undefined") {// Page Visibility API supported// 你的代码...
} else if (typeof document.msHidden !== "undefined") {// For IE// 你的代码...
} else if (typeof document.webkitHidden !== "undefined") {// For older Chrome and Safari// 你的代码...
} else {console.log("Page Visibility API not supported.");
}

这段额外的检测代码可以帮助你确认当前环境是否支持Page Visibility API,并根据不同的浏览器前缀做适配。

手势生成

html

<div className="page-container"><divid="container"style={{ width: "300px", height: "300px" }}ref={(ref) => { this.container = ref }}/>
</div>

react

import GestureUnlockRenderer, { Anchor } from 'fly-gesture-unlock';container;
gestureUnlockRenderer;
gestureEnd = (selectedAnchors: Anchor<ExtraStatus>[]) => {const anchorIds = selectedAnchors.map(anchor => anchor.id).join('');console.log(anchorIds);
};type ExtraStatus = never;// 借助提供的辅助函数生成锚点
const anchorDefines = GestureUnlockRenderer.AnchorMatrixFactory({canvasSize: { width: this.container.clientWidth, height: this.container.clientHeight },padding: 35,matrix: { row: 3, column: 3 },anchor: { anchorCircleRadius: 30, centerCircleRadius: 10 },
});this.gestureUnlockRenderer = new GestureUnlockRenderer<ExtraStatus>({container: this.container,anchorDefines,anchorStatusStyles: {'not-selected': {// 锚点圆的边框宽、边框颜色、填充颜色anchorCircleBorderWidth: 1,anchorCircleBorderColor: '#3ea1e5',},'selected': {// 锚点圆的边框宽、边框颜色、填充颜色anchorCircleBorderWidth: 1.5,anchorCircleBorderColor: '#128ce8',anchorCircleFillColor: '#ffffff',// 中心圆的边框宽、边框颜色、填充颜色centerCircleFillColor: '#128ce8'},},lineStatusStyles: {'normal': {lineColor: '#128ce8',lineWidth: 1,},},events: {'end': this.gestureEnd,},
});
http://www.lryc.cn/news/378091.html

相关文章:

  • [leetcode hot 150]第十五题,三数之和
  • 视频AI分析定时任务思路解析
  • tcp 粘包和拆包 及 解决粘包方案
  • 【2024泰迪杯】B 题:基于多模态特征融合的图像文本检索20页论文及Python代码
  • 华为设备telnet 远程访问配置实验简述
  • 在HTML中,如何正确使用语义化标签?
  • WHAT - 高性能和内存安全的 Rust(一)
  • 八、C#运算符
  • 【HiveSQL】join关联on和where的区别及效率对比
  • 如何解决windows自动更新,释放C盘更新内存
  • 初学51单片机之PWM实例呼吸灯以及遇到的问题(已解答)
  • 手机天线都去哪里了?
  • 计算机网络 —— 应用层(电子邮件)
  • Java18新特性(极简)
  • vscode连接ssh远程服务器
  • 【趣味测试】
  • 数据结构经典面试之数组——C#和C++篇
  • docker的基本知识
  • React Native性能优化红宝书
  • 后端不提供文件流接口,前台js使用a标签实现当前表格数据(数组非blob数据)下载成Excel
  • 如何使用ChatGPT辅助设计工作
  • hadoop服务器启动后无法执行hdfs dfs命令
  • Flink 1.19.1 standalone 集群模式部署及配置
  • 【深度学习】GELU激活函数是什么?
  • 如何编译和运行您的第一个Java程序
  • vscode用vue框架写一个登陆页面
  • 腾讯云API安全保障措施?有哪些调用限制?
  • 在建设工程合同争议案件中,如何来认定“竣工验收”?
  • Linux:多线程中的互斥与同步
  • 数据仓库之主题域