cbvirtua 1.0.35 → 1.0.36

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/ske.txt +74 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cbvirtua",
3
- "version": "1.0.35",
3
+ "version": "1.0.36",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {
package/ske.txt CHANGED
@@ -0,0 +1,74 @@
1
+ /**
2
+ * 网页空闲检测
3
+ * @param {() => void} callback 空闲时执行,即一定时长无操作时触发
4
+ * @param {number} [timeout=15] 时长,默认15s,单位:秒
5
+ * @param {boolean} [immediate=false] 是否立即开始,默认 false
6
+ * @returns
7
+ */
8
+ const onIdleDetection = (callback, timeout = 15, immediate = false) => {
9
+ let pageTimer;
10
+ let beginTime = 0;
11
+ const onClearTimer = () => {
12
+ pageTimer && clearTimeout(pageTimer);
13
+ pageTimer = undefined;
14
+ };
15
+ const onStartTimer = () => {
16
+ const currentTime = Date.now();
17
+ if (pageTimer && currentTime - beginTime < 100) {
18
+ return;
19
+ }
20
+
21
+ onClearTimer();
22
+ beginTime = currentTime;
23
+ pageTimer = setTimeout(() => {
24
+ callback();
25
+ }, timeout * 1000);
26
+ };
27
+
28
+ const onPageVisibility = () => {
29
+ // 页面显示状态改变时,移除延时器
30
+ onClearTimer();
31
+
32
+ if (document.visibilityState === 'visible') {
33
+ const currentTime = Date.now();
34
+ // 页面显示时,计算时间,如果超出限制时间则直接执行回调函数
35
+ if (currentTime - beginTime >= timeout * 1000) {
36
+ callback();
37
+ return;
38
+ }
39
+ // 继续计时
40
+ pageTimer = setTimeout(() => {
41
+ callback();
42
+ }, timeout * 1000 - (currentTime - beginTime));
43
+ }
44
+ };
45
+
46
+ const startDetection = () => {
47
+ onStartTimer();
48
+ document.addEventListener('keydown', onStartTimer);
49
+ document.addEventListener('mousemove', onStartTimer);
50
+ document.addEventListener('visibilitychange', onPageVisibility);
51
+ };
52
+
53
+ const stopDetection = () => {
54
+ onClearTimer();
55
+ document.removeEventListener('keydown', onStartTimer);
56
+ document.removeEventListener('mousemove', onStartTimer);
57
+ document.removeEventListener('visibilitychange', onPageVisibility);
58
+ };
59
+
60
+ const restartDetection = () => {
61
+ onClearTimer();
62
+ onStartTimer();
63
+ };
64
+
65
+ if (immediate) {
66
+ startDetection();
67
+ }
68
+
69
+ return {
70
+ startDetection,
71
+ stopDetection,
72
+ restartDetection
73
+ };
74
+ };