@daysnap/utils 0.0.53 → 0.0.55

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.
package/es/index.d.ts CHANGED
@@ -58,6 +58,7 @@ export * from './isUndefined';
58
58
  export * from './isWeixin';
59
59
  export * from './isWindow';
60
60
  export * from './kebabCase';
61
+ export * from './mousewheel';
61
62
  export * from './normalizePath';
62
63
  export * from './omit';
63
64
  export * from './padding';
@@ -73,6 +74,7 @@ export * from './reserve';
73
74
  export * from './rgbToHex';
74
75
  export * from './round';
75
76
  export * from './sleep';
77
+ export * from './splitArray';
76
78
  export * from './storage';
77
79
  export * from './stringTrim';
78
80
  export * from './stringifyQuery';
package/es/index.js CHANGED
@@ -59,6 +59,7 @@ export * from './isUndefined';
59
59
  export * from './isWeixin';
60
60
  export * from './isWindow';
61
61
  export * from './kebabCase';
62
+ export * from './mousewheel';
62
63
  export * from './normalizePath';
63
64
  export * from './omit';
64
65
  export * from './padding';
@@ -74,6 +75,7 @@ export * from './reserve';
74
75
  export * from './rgbToHex';
75
76
  export * from './round';
76
77
  export * from './sleep';
78
+ export * from './splitArray';
77
79
  export * from './storage';
78
80
  export * from './stringTrim';
79
81
  export * from './stringifyQuery';
@@ -0,0 +1,14 @@
1
+ interface MousewheelScrolling {
2
+ (result: {
3
+ direction: 'down' | 'up';
4
+ delta: number;
5
+ }): void;
6
+ }
7
+ interface MousewheelOptions {
8
+ scrollingSpeed?: number;
9
+ scrollDelay?: number;
10
+ }
11
+ export declare function mousewheel(scrolling: MousewheelScrolling, options?: MousewheelOptions): {
12
+ listener: (e: any) => false | undefined;
13
+ };
14
+ export {};
@@ -0,0 +1,61 @@
1
+ function getAverage(elements, number) {
2
+ let sum = 0;
3
+ //taking `number` elements from the end to make the average, if there are not enought, 1
4
+ const lastElements = elements.slice(Math.max(elements.length - number, 1));
5
+ for (let i = 0; i < lastElements.length; i++) {
6
+ sum = sum + lastElements[i];
7
+ }
8
+ return Math.ceil(sum / number);
9
+ }
10
+ export function mousewheel(scrolling, options) {
11
+ const { scrollingSpeed = 700, scrollDelay = 50 } = Object.assign({}, options);
12
+ let scrollings = [];
13
+ let prevTime = Date.now();
14
+ let lastAnimation = 0;
15
+ function isMoving() {
16
+ const timeNow = new Date().getTime();
17
+ // Cancel scroll if currently animating or within quiet period
18
+ if (timeNow - lastAnimation < scrollDelay + scrollingSpeed) {
19
+ return true;
20
+ }
21
+ return false;
22
+ }
23
+ const listener = (e) => {
24
+ const curTime = Date.now();
25
+ const delta = e.wheelDelta || -e.deltaY || -e.detail;
26
+ // const delta = Math.max(-1, Math.min(1, value))
27
+ const horizontalDetection = typeof e.wheelDeltaX !== 'undefined' || typeof e.deltaX !== 'undefined';
28
+ const isScrollingVertically = Math.abs(e.wheelDeltaX) < Math.abs(e.wheelDelta) ||
29
+ Math.abs(e.deltaX) < Math.abs(e.deltaY) ||
30
+ !horizontalDetection;
31
+ //Limiting the array to 150 (lets not waste memory!)
32
+ if (scrollings.length > 149) {
33
+ scrollings.shift();
34
+ }
35
+ //keeping record of the previous scrollings
36
+ scrollings.push(Math.abs(delta));
37
+ //time difference between the last scroll and the current one
38
+ const timeDiff = curTime - prevTime;
39
+ prevTime = curTime;
40
+ //haven't they scrolled in a while?
41
+ //(enough to be consider a different scrolling action to scroll another section)
42
+ if (timeDiff > 200) {
43
+ //emptying the array, we dont care about old scrollings for our averages
44
+ scrollings = [];
45
+ }
46
+ if (!isMoving()) {
47
+ const averageEnd = getAverage(scrollings, 10);
48
+ const averageMiddle = getAverage(scrollings, 70);
49
+ const isAccelerating = averageEnd >= averageMiddle;
50
+ if (isAccelerating && isScrollingVertically) {
51
+ scrolling({
52
+ direction: delta < 0 ? 'up' : 'down',
53
+ delta,
54
+ });
55
+ lastAnimation = Date.now();
56
+ }
57
+ return false;
58
+ }
59
+ };
60
+ return { listener };
61
+ }
@@ -0,0 +1,4 @@
1
+ /**
2
+ * 分割数组
3
+ */
4
+ export declare function splitArray<T = any>(source: T[], size: number): T[][];
@@ -0,0 +1,10 @@
1
+ /**
2
+ * 分割数组
3
+ */
4
+ export function splitArray(source, size) {
5
+ const result = [];
6
+ for (let i = 0, len = source.length; i < len; i += size) {
7
+ result.push(source.slice(i, i + size));
8
+ }
9
+ return result;
10
+ }
package/lib/index.d.ts CHANGED
@@ -58,6 +58,7 @@ export * from './isUndefined';
58
58
  export * from './isWeixin';
59
59
  export * from './isWindow';
60
60
  export * from './kebabCase';
61
+ export * from './mousewheel';
61
62
  export * from './normalizePath';
62
63
  export * from './omit';
63
64
  export * from './padding';
@@ -73,6 +74,7 @@ export * from './reserve';
73
74
  export * from './rgbToHex';
74
75
  export * from './round';
75
76
  export * from './sleep';
77
+ export * from './splitArray';
76
78
  export * from './storage';
77
79
  export * from './stringTrim';
78
80
  export * from './stringifyQuery';
package/lib/index.js CHANGED
@@ -75,6 +75,7 @@ __exportStar(require("./isUndefined"), exports);
75
75
  __exportStar(require("./isWeixin"), exports);
76
76
  __exportStar(require("./isWindow"), exports);
77
77
  __exportStar(require("./kebabCase"), exports);
78
+ __exportStar(require("./mousewheel"), exports);
78
79
  __exportStar(require("./normalizePath"), exports);
79
80
  __exportStar(require("./omit"), exports);
80
81
  __exportStar(require("./padding"), exports);
@@ -90,6 +91,7 @@ __exportStar(require("./reserve"), exports);
90
91
  __exportStar(require("./rgbToHex"), exports);
91
92
  __exportStar(require("./round"), exports);
92
93
  __exportStar(require("./sleep"), exports);
94
+ __exportStar(require("./splitArray"), exports);
93
95
  __exportStar(require("./storage"), exports);
94
96
  __exportStar(require("./stringTrim"), exports);
95
97
  __exportStar(require("./stringifyQuery"), exports);
@@ -0,0 +1,14 @@
1
+ interface MousewheelScrolling {
2
+ (result: {
3
+ direction: 'down' | 'up';
4
+ delta: number;
5
+ }): void;
6
+ }
7
+ interface MousewheelOptions {
8
+ scrollingSpeed?: number;
9
+ scrollDelay?: number;
10
+ }
11
+ export declare function mousewheel(scrolling: MousewheelScrolling, options?: MousewheelOptions): {
12
+ listener: (e: any) => false | undefined;
13
+ };
14
+ export {};
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mousewheel = void 0;
4
+ function getAverage(elements, number) {
5
+ let sum = 0;
6
+ //taking `number` elements from the end to make the average, if there are not enought, 1
7
+ const lastElements = elements.slice(Math.max(elements.length - number, 1));
8
+ for (let i = 0; i < lastElements.length; i++) {
9
+ sum = sum + lastElements[i];
10
+ }
11
+ return Math.ceil(sum / number);
12
+ }
13
+ function mousewheel(scrolling, options) {
14
+ const { scrollingSpeed = 700, scrollDelay = 50 } = Object.assign({}, options);
15
+ let scrollings = [];
16
+ let prevTime = Date.now();
17
+ let lastAnimation = 0;
18
+ function isMoving() {
19
+ const timeNow = new Date().getTime();
20
+ // Cancel scroll if currently animating or within quiet period
21
+ if (timeNow - lastAnimation < scrollDelay + scrollingSpeed) {
22
+ return true;
23
+ }
24
+ return false;
25
+ }
26
+ const listener = (e) => {
27
+ const curTime = Date.now();
28
+ const delta = e.wheelDelta || -e.deltaY || -e.detail;
29
+ // const delta = Math.max(-1, Math.min(1, value))
30
+ const horizontalDetection = typeof e.wheelDeltaX !== 'undefined' || typeof e.deltaX !== 'undefined';
31
+ const isScrollingVertically = Math.abs(e.wheelDeltaX) < Math.abs(e.wheelDelta) ||
32
+ Math.abs(e.deltaX) < Math.abs(e.deltaY) ||
33
+ !horizontalDetection;
34
+ //Limiting the array to 150 (lets not waste memory!)
35
+ if (scrollings.length > 149) {
36
+ scrollings.shift();
37
+ }
38
+ //keeping record of the previous scrollings
39
+ scrollings.push(Math.abs(delta));
40
+ //time difference between the last scroll and the current one
41
+ const timeDiff = curTime - prevTime;
42
+ prevTime = curTime;
43
+ //haven't they scrolled in a while?
44
+ //(enough to be consider a different scrolling action to scroll another section)
45
+ if (timeDiff > 200) {
46
+ //emptying the array, we dont care about old scrollings for our averages
47
+ scrollings = [];
48
+ }
49
+ if (!isMoving()) {
50
+ const averageEnd = getAverage(scrollings, 10);
51
+ const averageMiddle = getAverage(scrollings, 70);
52
+ const isAccelerating = averageEnd >= averageMiddle;
53
+ if (isAccelerating && isScrollingVertically) {
54
+ scrolling({
55
+ direction: delta < 0 ? 'up' : 'down',
56
+ delta,
57
+ });
58
+ lastAnimation = Date.now();
59
+ }
60
+ return false;
61
+ }
62
+ };
63
+ return { listener };
64
+ }
65
+ exports.mousewheel = mousewheel;
@@ -0,0 +1,4 @@
1
+ /**
2
+ * 分割数组
3
+ */
4
+ export declare function splitArray<T = any>(source: T[], size: number): T[][];
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.splitArray = void 0;
4
+ /**
5
+ * 分割数组
6
+ */
7
+ function splitArray(source, size) {
8
+ const result = [];
9
+ for (let i = 0, len = source.length; i < len; i += size) {
10
+ result.push(source.slice(i, i + size));
11
+ }
12
+ return result;
13
+ }
14
+ exports.splitArray = splitArray;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@daysnap/utils",
3
- "version": "0.0.53",
3
+ "version": "0.0.55",
4
4
  "description": "通用的工具库",
5
5
  "main": "lib/index.js",
6
6
  "module": "es/index.js",