微信小程序记录用户在图书详情页面停留时间--即阅读时间,如果超过两小时,则每小时提醒用户一次

devtools/2025/3/1 12:35:48/

小程序>微信小程序中记录用户在图书详情页面的停留时间,并根据条件(如超过两小时)进行提醒,可以通过以下步骤实现。以下是详细的实现方案:


1. 实现思路

  • 记录进入页面的时间:当用户进入图书详情页面时,记录当前时间。
  • 记录离开页面的时间:当用户离开页面时,计算停留时间。
  • 定时提醒:如果用户停留时间超过两小时,则每小时触发一次提醒。

2. 代码实现

(1) 页面初始化:记录进入时间

onLoadonShow 生命周期函数中记录用户进入页面的时间。

Page({data: {startTime: null, // 用户进入页面的时间timer: null,     // 定时器isReminded: false, // 是否已经提醒过},onLoad() {// 记录用户进入页面的时间this.setData({startTime: Date.now(), // 获取当前时间戳(毫秒)});console.log('用户进入页面时间:', this.data.startTime);// 启动定时器,用于检测停留时间this.startTimer();},startTimer() {const that = this;this.setData({timer: setInterval(() => {that.checkReadingTime();}, 60000), // 每分钟检查一次});},
});

(2) 检查阅读时间并提醒

在定时器中检查用户的停留时间,如果超过两小时,则每小时提醒一次。

checkReadingTime() {const currentTime = Date.now(); // 当前时间const startTime = this.data.startTime; // 用户进入页面的时间const elapsedTime = (currentTime - startTime) / 1000 / 60; // 停留时间(分钟)if (elapsedTime > 120 && !this.data.isReminded) { // 如果超过两小时且未提醒过this.remindUser();this.setData({isReminded: true, // 标记已提醒});} else if (elapsedTime > 120 && Math.floor(elapsedTime / 60) > 2) { // 如果超过两小时后每小时提醒const hoursPassed = Math.floor(elapsedTime / 60);if (hoursPassed % 1 === 0 && hoursPassed > 2) { // 每整小时提醒一次this.remindUser();}}
},

(3) 提醒用户

使用 wx.showToast 或其他方式提醒用户。

remindUser() {wx.showToast({title: '您已阅读超过两小时,请注意休息!',icon: 'none',duration: 3000,});
},

(4) 页面卸载:清理定时器

在用户离开页面时(如切换到其他页面或关闭小程序),清理定时器以避免内存泄漏。

onUnload() {clearInterval(this.data.timer); // 清除定时器console.log('用户离开页面,清除定时器');
},

3. 注意事项

  1. 时间精度

    • 使用 Date.now() 获取时间戳,精确到毫秒。
    • 如果需要更高的精度,可以考虑使用 performance.now(),但小程序>微信小程序可能不支持。
  2. 定时器管理

    • onUnload 中清除定时器,确保资源释放。
    • 如果用户频繁切换页面,可能需要在 onHideonShow 中暂停和恢复定时器。
  3. 用户体验

    • 提醒消息应简洁明了,避免打扰用户。
    • 可以提供选项让用户关闭提醒功能。
  4. 多端适配

    • 如果小程序需要适配多个平台(如微信、支付宝等),请确保 API 兼容性。

4. 示例完整代码

以下是完整的代码示例:

Page({data: {startTime: null, // 用户进入页面的时间timer: null,     // 定时器isReminded: false, // 是否已经提醒过},onLoad() {this.setData({startTime: Date.now(), // 获取当前时间戳});console.log('用户进入页面时间:', this.data.startTime);this.startTimer();},startTimer() {const that = this;this.setData({timer: setInterval(() => {that.checkReadingTime();}, 60000), // 每分钟检查一次});},checkReadingTime() {const currentTime = Date.now(); // 当前时间const startTime = this.data.startTime; // 用户进入页面的时间const elapsedTime = (currentTime - startTime) / 1000 / 60; // 停留时间(分钟)if (elapsedTime > 120 && !this.data.isReminded) { // 如果超过两小时且未提醒过this.remindUser();this.setData({isReminded: true, // 标记已提醒});} else if (elapsedTime > 120 && Math.floor(elapsedTime / 60) > 2) { // 如果超过两小时后每小时提醒const hoursPassed = Math.floor(elapsedTime / 60);if (hoursPassed % 1 === 0 && hoursPassed > 2) { // 每整小时提醒一次this.remindUser();}}},remindUser() {wx.showToast({title: '您已阅读超过两小时,请注意休息!',icon: 'none',duration: 3000,});},onUnload() {clearInterval(this.data.timer); // 清除定时器console.log('用户离开页面,清除定时器');},
});


http://www.ppmy.cn/devtools/163617.html

相关文章

SpringSecurity踢出指定用户

SpringSecurity中可以使用 SessionRegistry 的实现类 SessionRegistryImpl 来获取session相关信息,可以通过这个实现类来踢出用户。 SpringSecurity配置 EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter {AutowiredISysUser…

MR30系列分布式I/O:高稳定与高精准赋能锂电池覆膜工艺革新

在新能源行业高速发展的背景下,锂电池生产工艺对自动化控制的精准性和可靠性提出了更高要求。作为锂电池生产中的关键环节,覆膜工艺直接关系到电池的绝缘性能、安全性及使用寿命。面对复杂的工艺控制需求,明达技术MR30系列分布式I/O模块凭借其…

【Groovy】流程控制

1 选择结构 Groovy 中选择结构主要包含 if -else、switch 语句,并且可以返回结果。 1.1 if-else def score 85 if (score > 90) {println("优秀") } else if (score > 80) {println("良好") } else if (score > 60) {println("…

【每日刷题】Day184

【每日刷题】Day184 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 1700. 无法吃午餐的学生数量 - 力扣(LeetCode) 2. 146. LRU 缓存 - 力扣&a…

SQL Server 视图的更新排查及清除缓存

目录 前言排查方向 前言 获取数据的时候,发现数据少了两个字段值,归根原因是Java中的实体类少写了两个,后续补充上就好了! 但也正了解到视图中的刷新原理以及排查机制,如果确认是视图等引起,可结合如下文…

【MyBatis】核心配置文件详解

文章目录 MyBatis核心配置文件详解1.configuration:2.environments:3.environmen:4.transactionManager:5.dataSource:5.1 UNPOOLED:5.2 POOLED:5.3 JNDI: 6. properties7. mapper M…

使用Fuse-DFS挂载文件存储 HDFS-后端存储ceph

1. 编译环境准备 yum install cmake3 ln -s /usr/bin/cmake3 /usr/bin/cmake yum install gcc-c安装挂载依赖 yum -y install fuse fuse-devel fuse-libs执行以下命令,载入FUSE模块 modprobe fuse2. 下载源码包 hadoop-3.3.4-src.tar.gz解压后执行以下命令 打开…

Transformer 代码剖析3 - 参数配置 (pytorch实现)

一、硬件环境配置模块 参考:项目代码 原代码实现 """ author : Hyunwoong when : 2019-10-22 homepage : https://github.com/gusdnd852 """ import torch # GPU device setting device torch.device("cuda:0" if tor…