@allahjs/utils 0.0.1
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/LICENSE +21 -0
- package/README.md +244 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/browser/cookieUtils/index.cjs +100 -0
- package/dist/browser/cookieUtils/index.cjs.map +1 -0
- package/dist/browser/cookieUtils/index.d.ts +55 -0
- package/dist/browser/domUtils/index.cjs +237 -0
- package/dist/browser/domUtils/index.cjs.map +1 -0
- package/dist/browser/domUtils/index.d.ts +116 -0
- package/dist/browser/index.cjs +12 -0
- package/dist/browser/index.cjs.map +1 -0
- package/dist/browser/index.d.ts +3 -0
- package/dist/browser/urlUtils/index.cjs +262 -0
- package/dist/browser/urlUtils/index.cjs.map +1 -0
- package/dist/browser/urlUtils/index.d.ts +72 -0
- package/dist/core/arrayUtils/index.cjs +109 -0
- package/dist/core/arrayUtils/index.cjs.map +1 -0
- package/dist/core/arrayUtils/index.d.ts +67 -0
- package/dist/core/asyncUtils/index.cjs +180 -0
- package/dist/core/asyncUtils/index.cjs.map +1 -0
- package/dist/core/asyncUtils/index.d.ts +80 -0
- package/dist/core/colorUtils/index.cjs +38 -0
- package/dist/core/colorUtils/index.cjs.map +1 -0
- package/dist/core/colorUtils/index.d.ts +10 -0
- package/dist/core/cryptoUtils/index.cjs +428 -0
- package/dist/core/cryptoUtils/index.cjs.map +1 -0
- package/dist/core/cryptoUtils/index.d.ts +132 -0
- package/dist/core/dateUtils/index.cjs +245 -0
- package/dist/core/dateUtils/index.cjs.map +1 -0
- package/dist/core/dateUtils/index.d.ts +117 -0
- package/dist/core/index.cjs +34 -0
- package/dist/core/index.cjs.map +1 -0
- package/dist/core/index.d.ts +118 -0
- package/dist/core/numberUtils/index.cjs +126 -0
- package/dist/core/numberUtils/index.cjs.map +1 -0
- package/dist/core/numberUtils/index.d.ts +91 -0
- package/dist/core/objectUtils/index.cjs +249 -0
- package/dist/core/objectUtils/index.cjs.map +1 -0
- package/dist/core/objectUtils/index.d.ts +91 -0
- package/dist/core/pageUtils/index.cjs +74 -0
- package/dist/core/pageUtils/index.cjs.map +1 -0
- package/dist/core/pageUtils/index.d.ts +52 -0
- package/dist/core/stringUtils/index.cjs +163 -0
- package/dist/core/stringUtils/index.cjs.map +1 -0
- package/dist/core/stringUtils/index.d.ts +69 -0
- package/dist/core/validationUtils/index.cjs +154 -0
- package/dist/core/validationUtils/index.cjs.map +1 -0
- package/dist/core/validationUtils/index.d.ts +87 -0
- package/dist/esm/browser/cookieUtils/index.d.ts +55 -0
- package/dist/esm/browser/cookieUtils/index.js +96 -0
- package/dist/esm/browser/cookieUtils/index.js.map +1 -0
- package/dist/esm/browser/domUtils/index.d.ts +116 -0
- package/dist/esm/browser/domUtils/index.js +233 -0
- package/dist/esm/browser/domUtils/index.js.map +1 -0
- package/dist/esm/browser/index.d.ts +3 -0
- package/dist/esm/browser/index.js +4 -0
- package/dist/esm/browser/index.js.map +1 -0
- package/dist/esm/browser/urlUtils/index.d.ts +72 -0
- package/dist/esm/browser/urlUtils/index.js +248 -0
- package/dist/esm/browser/urlUtils/index.js.map +1 -0
- package/dist/esm/core/arrayUtils/index.d.ts +67 -0
- package/dist/esm/core/arrayUtils/index.js +105 -0
- package/dist/esm/core/arrayUtils/index.js.map +1 -0
- package/dist/esm/core/asyncUtils/index.d.ts +80 -0
- package/dist/esm/core/asyncUtils/index.js +175 -0
- package/dist/esm/core/asyncUtils/index.js.map +1 -0
- package/dist/esm/core/colorUtils/index.d.ts +10 -0
- package/dist/esm/core/colorUtils/index.js +34 -0
- package/dist/esm/core/colorUtils/index.js.map +1 -0
- package/dist/esm/core/cryptoUtils/index.d.ts +132 -0
- package/dist/esm/core/cryptoUtils/index.js +424 -0
- package/dist/esm/core/cryptoUtils/index.js.map +1 -0
- package/dist/esm/core/dateUtils/index.d.ts +117 -0
- package/dist/esm/core/dateUtils/index.js +241 -0
- package/dist/esm/core/dateUtils/index.js.map +1 -0
- package/dist/esm/core/index.d.ts +118 -0
- package/dist/esm/core/index.js +30 -0
- package/dist/esm/core/index.js.map +1 -0
- package/dist/esm/core/numberUtils/index.d.ts +91 -0
- package/dist/esm/core/numberUtils/index.js +122 -0
- package/dist/esm/core/numberUtils/index.js.map +1 -0
- package/dist/esm/core/objectUtils/index.d.ts +91 -0
- package/dist/esm/core/objectUtils/index.js +245 -0
- package/dist/esm/core/objectUtils/index.js.map +1 -0
- package/dist/esm/core/pageUtils/index.d.ts +52 -0
- package/dist/esm/core/pageUtils/index.js +66 -0
- package/dist/esm/core/pageUtils/index.js.map +1 -0
- package/dist/esm/core/stringUtils/index.d.ts +69 -0
- package/dist/esm/core/stringUtils/index.js +159 -0
- package/dist/esm/core/stringUtils/index.js.map +1 -0
- package/dist/esm/core/validationUtils/index.d.ts +87 -0
- package/dist/esm/core/validationUtils/index.js +150 -0
- package/dist/esm/core/validationUtils/index.js.map +1 -0
- package/dist/esm/index.d.ts +22 -0
- package/dist/esm/index.js +26 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/request/ReqQueue/index.js +59 -0
- package/dist/esm/request/ReqQueue/index.js.map +1 -0
- package/dist/esm/request/httpCode/index.js +49 -0
- package/dist/esm/request/httpCode/index.js.map +1 -0
- package/dist/esm/request/httpUtils/index.js +359 -0
- package/dist/esm/request/httpUtils/index.js.map +1 -0
- package/dist/esm/request/index.d.ts +15 -0
- package/dist/esm/request/index.js +166 -0
- package/dist/esm/request/index.js.map +1 -0
- package/dist/esm/request/typings/index.d.ts +184 -0
- package/dist/esm/request/uniRequest/index.js +62 -0
- package/dist/esm/request/uniRequest/index.js.map +1 -0
- package/dist/esm/types/data/index.d.ts +188 -0
- package/dist/esm/types/data/index.js +13 -0
- package/dist/esm/types/data/index.js.map +1 -0
- package/dist/esm/types/index.d.ts +1 -0
- package/dist/esm/types/index.js +2 -0
- package/dist/esm/types/index.js.map +1 -0
- package/dist/esm/uniapp/Tips/index.d.ts +295 -0
- package/dist/esm/uniapp/Tips/index.js +498 -0
- package/dist/esm/uniapp/Tips/index.js.map +1 -0
- package/dist/esm/uniapp/cloudUtils/index.d.ts +56 -0
- package/dist/esm/uniapp/cloudUtils/index.js +90 -0
- package/dist/esm/uniapp/cloudUtils/index.js.map +1 -0
- package/dist/esm/uniapp/index.d.ts +3 -0
- package/dist/esm/uniapp/index.js +4 -0
- package/dist/esm/uniapp/index.js.map +1 -0
- package/dist/esm/uniapp/uniUtils/index.d.ts +113 -0
- package/dist/esm/uniapp/uniUtils/index.js +199 -0
- package/dist/esm/uniapp/uniUtils/index.js.map +1 -0
- package/dist/index.cjs +88 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/request/ReqQueue/index.cjs +63 -0
- package/dist/request/ReqQueue/index.cjs.map +1 -0
- package/dist/request/httpCode/index.cjs +52 -0
- package/dist/request/httpCode/index.cjs.map +1 -0
- package/dist/request/httpUtils/index.cjs +365 -0
- package/dist/request/httpUtils/index.cjs.map +1 -0
- package/dist/request/index.cjs +170 -0
- package/dist/request/index.cjs.map +1 -0
- package/dist/request/index.d.ts +15 -0
- package/dist/request/typings/index.d.ts +184 -0
- package/dist/request/uniRequest/index.cjs +66 -0
- package/dist/request/uniRequest/index.cjs.map +1 -0
- package/dist/types/data/index.cjs +15 -0
- package/dist/types/data/index.cjs.map +1 -0
- package/dist/types/data/index.d.ts +188 -0
- package/dist/types/index.cjs +8 -0
- package/dist/types/index.cjs.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/uniapp/Tips/index.cjs +521 -0
- package/dist/uniapp/Tips/index.cjs.map +1 -0
- package/dist/uniapp/Tips/index.d.ts +295 -0
- package/dist/uniapp/cloudUtils/index.cjs +92 -0
- package/dist/uniapp/cloudUtils/index.cjs.map +1 -0
- package/dist/uniapp/cloudUtils/index.d.ts +56 -0
- package/dist/uniapp/index.cjs +53 -0
- package/dist/uniapp/index.cjs.map +1 -0
- package/dist/uniapp/index.d.ts +3 -0
- package/dist/uniapp/uniUtils/index.cjs +213 -0
- package/dist/uniapp/uniUtils/index.cjs.map +1 -0
- package/dist/uniapp/uniUtils/index.d.ts +113 -0
- package/package.json +129 -0
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DOM工具函数(仅在浏览器环境中可用)
|
|
3
|
+
*/
|
|
4
|
+
declare const domUtils: {
|
|
5
|
+
/**
|
|
6
|
+
* 检查是否在浏览器环境
|
|
7
|
+
* @returns 是否在浏览器环境
|
|
8
|
+
*/
|
|
9
|
+
isBrowser(): boolean;
|
|
10
|
+
/**
|
|
11
|
+
* 查询元素
|
|
12
|
+
* @param selector 选择器
|
|
13
|
+
* @param parent 父元素,默认为document
|
|
14
|
+
* @returns 元素或null
|
|
15
|
+
*/
|
|
16
|
+
$(selector: string, parent?: Document | Element): Element | null;
|
|
17
|
+
/**
|
|
18
|
+
* 查询所有元素
|
|
19
|
+
* @param selector 选择器
|
|
20
|
+
* @param parent 父元素,默认为document
|
|
21
|
+
* @returns 元素数组
|
|
22
|
+
*/
|
|
23
|
+
$$(selector: string, parent?: Document | Element): Element[];
|
|
24
|
+
/**
|
|
25
|
+
* 添加CSS类
|
|
26
|
+
* @param element 元素
|
|
27
|
+
* @param className 类名
|
|
28
|
+
*/
|
|
29
|
+
addClass(element: Element, className: string): void;
|
|
30
|
+
/**
|
|
31
|
+
* 移除CSS类
|
|
32
|
+
* @param element 元素
|
|
33
|
+
* @param className 类名
|
|
34
|
+
*/
|
|
35
|
+
removeClass(element: Element, className: string): void;
|
|
36
|
+
/**
|
|
37
|
+
* 切换CSS类
|
|
38
|
+
* @param element 元素
|
|
39
|
+
* @param className 类名
|
|
40
|
+
* @returns 是否添加了类
|
|
41
|
+
*/
|
|
42
|
+
toggleClass(element: Element, className: string): boolean;
|
|
43
|
+
/**
|
|
44
|
+
* 检查是否包含CSS类
|
|
45
|
+
* @param element 元素
|
|
46
|
+
* @param className 类名
|
|
47
|
+
* @returns 是否包含类
|
|
48
|
+
*/
|
|
49
|
+
hasClass(element: Element, className: string): boolean;
|
|
50
|
+
/**
|
|
51
|
+
* 设置元素样式
|
|
52
|
+
* @param element 元素
|
|
53
|
+
* @param styles 样式对象
|
|
54
|
+
*/
|
|
55
|
+
setStyle(element: HTMLElement, styles: Partial<CSSStyleDeclaration>): void;
|
|
56
|
+
/**
|
|
57
|
+
* 获取元素样式
|
|
58
|
+
* @param element 元素
|
|
59
|
+
* @param property 样式属性
|
|
60
|
+
* @returns 样式值
|
|
61
|
+
*/
|
|
62
|
+
getStyle(element: Element, property: string): string;
|
|
63
|
+
/**
|
|
64
|
+
* 创建元素
|
|
65
|
+
* @param tagName 标签名
|
|
66
|
+
* @param attributes 属性对象
|
|
67
|
+
* @param children 子元素或文本
|
|
68
|
+
* @returns 创建的元素
|
|
69
|
+
*/
|
|
70
|
+
createElement(tagName: string, attributes?: Record<string, string>, children?: (Element | string)[]): HTMLElement | null;
|
|
71
|
+
/**
|
|
72
|
+
* 获取元素位置信息
|
|
73
|
+
* @param element 元素
|
|
74
|
+
* @returns 位置信息
|
|
75
|
+
*/
|
|
76
|
+
getElementPosition(element: Element): {
|
|
77
|
+
top: number;
|
|
78
|
+
left: number;
|
|
79
|
+
width: number;
|
|
80
|
+
height: number;
|
|
81
|
+
};
|
|
82
|
+
/**
|
|
83
|
+
* 检查元素是否在视口中
|
|
84
|
+
* @param element 元素
|
|
85
|
+
* @param threshold 阈值(0-1),默认为0
|
|
86
|
+
* @returns 是否在视口中
|
|
87
|
+
*/
|
|
88
|
+
isInViewport(element: Element, threshold?: number): boolean;
|
|
89
|
+
/**
|
|
90
|
+
* 平滑滚动到元素
|
|
91
|
+
* @param element 目标元素
|
|
92
|
+
* @param options 滚动选项
|
|
93
|
+
*/
|
|
94
|
+
scrollToElement(element: Element, options?: ScrollIntoViewOptions): void;
|
|
95
|
+
/**
|
|
96
|
+
* 复制文本到剪贴板
|
|
97
|
+
* @param text 要复制的文本
|
|
98
|
+
* @returns 是否复制成功
|
|
99
|
+
*/
|
|
100
|
+
copyToClipboard(text: string): Promise<boolean>;
|
|
101
|
+
/**
|
|
102
|
+
* 监听元素大小变化
|
|
103
|
+
* @param element 元素
|
|
104
|
+
* @param callback 回调函数
|
|
105
|
+
* @returns 取消监听的函数
|
|
106
|
+
*/
|
|
107
|
+
observeResize(element: Element, callback: (entry: ResizeObserverEntry) => void): () => void;
|
|
108
|
+
/**
|
|
109
|
+
* 导入cdn的方法
|
|
110
|
+
* @param url 需要导入的文件
|
|
111
|
+
* @param name 名称
|
|
112
|
+
*/
|
|
113
|
+
importCDN(url: string, name: keyof Window): void;
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
export { domUtils as default };
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DOM工具函数(仅在浏览器环境中可用)
|
|
3
|
+
*/
|
|
4
|
+
const domUtils = {
|
|
5
|
+
/**
|
|
6
|
+
* 检查是否在浏览器环境
|
|
7
|
+
* @returns 是否在浏览器环境
|
|
8
|
+
*/
|
|
9
|
+
isBrowser() {
|
|
10
|
+
return typeof window !== 'undefined' && typeof document !== 'undefined';
|
|
11
|
+
},
|
|
12
|
+
/**
|
|
13
|
+
* 查询元素
|
|
14
|
+
* @param selector 选择器
|
|
15
|
+
* @param parent 父元素,默认为document
|
|
16
|
+
* @returns 元素或null
|
|
17
|
+
*/
|
|
18
|
+
$(selector, parent = document) {
|
|
19
|
+
if (!this.isBrowser())
|
|
20
|
+
return null;
|
|
21
|
+
return parent.querySelector(selector);
|
|
22
|
+
},
|
|
23
|
+
/**
|
|
24
|
+
* 查询所有元素
|
|
25
|
+
* @param selector 选择器
|
|
26
|
+
* @param parent 父元素,默认为document
|
|
27
|
+
* @returns 元素数组
|
|
28
|
+
*/
|
|
29
|
+
$$(selector, parent = document) {
|
|
30
|
+
if (!this.isBrowser())
|
|
31
|
+
return [];
|
|
32
|
+
return Array.from(parent.querySelectorAll(selector));
|
|
33
|
+
},
|
|
34
|
+
/**
|
|
35
|
+
* 添加CSS类
|
|
36
|
+
* @param element 元素
|
|
37
|
+
* @param className 类名
|
|
38
|
+
*/
|
|
39
|
+
addClass(element, className) {
|
|
40
|
+
if (!this.isBrowser())
|
|
41
|
+
return;
|
|
42
|
+
element.classList.add(className);
|
|
43
|
+
},
|
|
44
|
+
/**
|
|
45
|
+
* 移除CSS类
|
|
46
|
+
* @param element 元素
|
|
47
|
+
* @param className 类名
|
|
48
|
+
*/
|
|
49
|
+
removeClass(element, className) {
|
|
50
|
+
if (!this.isBrowser())
|
|
51
|
+
return;
|
|
52
|
+
element.classList.remove(className);
|
|
53
|
+
},
|
|
54
|
+
/**
|
|
55
|
+
* 切换CSS类
|
|
56
|
+
* @param element 元素
|
|
57
|
+
* @param className 类名
|
|
58
|
+
* @returns 是否添加了类
|
|
59
|
+
*/
|
|
60
|
+
toggleClass(element, className) {
|
|
61
|
+
if (!this.isBrowser())
|
|
62
|
+
return false;
|
|
63
|
+
return element.classList.toggle(className);
|
|
64
|
+
},
|
|
65
|
+
/**
|
|
66
|
+
* 检查是否包含CSS类
|
|
67
|
+
* @param element 元素
|
|
68
|
+
* @param className 类名
|
|
69
|
+
* @returns 是否包含类
|
|
70
|
+
*/
|
|
71
|
+
hasClass(element, className) {
|
|
72
|
+
if (!this.isBrowser())
|
|
73
|
+
return false;
|
|
74
|
+
return element.classList.contains(className);
|
|
75
|
+
},
|
|
76
|
+
/**
|
|
77
|
+
* 设置元素样式
|
|
78
|
+
* @param element 元素
|
|
79
|
+
* @param styles 样式对象
|
|
80
|
+
*/
|
|
81
|
+
setStyle(element, styles) {
|
|
82
|
+
if (!this.isBrowser())
|
|
83
|
+
return;
|
|
84
|
+
Object.assign(element.style, styles);
|
|
85
|
+
},
|
|
86
|
+
/**
|
|
87
|
+
* 获取元素样式
|
|
88
|
+
* @param element 元素
|
|
89
|
+
* @param property 样式属性
|
|
90
|
+
* @returns 样式值
|
|
91
|
+
*/
|
|
92
|
+
getStyle(element, property) {
|
|
93
|
+
if (!this.isBrowser())
|
|
94
|
+
return '';
|
|
95
|
+
return window.getComputedStyle(element).getPropertyValue(property);
|
|
96
|
+
},
|
|
97
|
+
/**
|
|
98
|
+
* 创建元素
|
|
99
|
+
* @param tagName 标签名
|
|
100
|
+
* @param attributes 属性对象
|
|
101
|
+
* @param children 子元素或文本
|
|
102
|
+
* @returns 创建的元素
|
|
103
|
+
*/
|
|
104
|
+
createElement(tagName, attributes = {}, children = []) {
|
|
105
|
+
if (!this.isBrowser())
|
|
106
|
+
return null;
|
|
107
|
+
const element = document.createElement(tagName);
|
|
108
|
+
// 设置属性
|
|
109
|
+
Object.entries(attributes).forEach(([key, value]) => {
|
|
110
|
+
element.setAttribute(key, value);
|
|
111
|
+
});
|
|
112
|
+
// 添加子元素
|
|
113
|
+
children.forEach(child => {
|
|
114
|
+
if (typeof child === 'string') {
|
|
115
|
+
element.appendChild(document.createTextNode(child));
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
element.appendChild(child);
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
return element;
|
|
122
|
+
},
|
|
123
|
+
/**
|
|
124
|
+
* 获取元素位置信息
|
|
125
|
+
* @param element 元素
|
|
126
|
+
* @returns 位置信息
|
|
127
|
+
*/
|
|
128
|
+
getElementPosition(element) {
|
|
129
|
+
if (!this.isBrowser())
|
|
130
|
+
return { top: 0, left: 0, width: 0, height: 0 };
|
|
131
|
+
const rect = element.getBoundingClientRect();
|
|
132
|
+
return {
|
|
133
|
+
top: rect.top + window.scrollY,
|
|
134
|
+
left: rect.left + window.scrollX,
|
|
135
|
+
width: rect.width,
|
|
136
|
+
height: rect.height
|
|
137
|
+
};
|
|
138
|
+
},
|
|
139
|
+
/**
|
|
140
|
+
* 检查元素是否在视口中
|
|
141
|
+
* @param element 元素
|
|
142
|
+
* @param threshold 阈值(0-1),默认为0
|
|
143
|
+
* @returns 是否在视口中
|
|
144
|
+
*/
|
|
145
|
+
isInViewport(element, threshold = 0) {
|
|
146
|
+
if (!this.isBrowser())
|
|
147
|
+
return false;
|
|
148
|
+
const rect = element.getBoundingClientRect();
|
|
149
|
+
const windowHeight = window.innerHeight;
|
|
150
|
+
const windowWidth = window.innerWidth;
|
|
151
|
+
const verticalThreshold = windowHeight * threshold;
|
|
152
|
+
const horizontalThreshold = windowWidth * threshold;
|
|
153
|
+
return (rect.top >= -verticalThreshold &&
|
|
154
|
+
rect.left >= -horizontalThreshold &&
|
|
155
|
+
rect.bottom <= windowHeight + verticalThreshold &&
|
|
156
|
+
rect.right <= windowWidth + horizontalThreshold);
|
|
157
|
+
},
|
|
158
|
+
/**
|
|
159
|
+
* 平滑滚动到元素
|
|
160
|
+
* @param element 目标元素
|
|
161
|
+
* @param options 滚动选项
|
|
162
|
+
*/
|
|
163
|
+
scrollToElement(element, options = { behavior: 'smooth', block: 'start' }) {
|
|
164
|
+
if (!this.isBrowser())
|
|
165
|
+
return;
|
|
166
|
+
element.scrollIntoView(options);
|
|
167
|
+
},
|
|
168
|
+
/**
|
|
169
|
+
* 复制文本到剪贴板
|
|
170
|
+
* @param text 要复制的文本
|
|
171
|
+
* @returns 是否复制成功
|
|
172
|
+
*/
|
|
173
|
+
async copyToClipboard(text) {
|
|
174
|
+
if (!this.isBrowser())
|
|
175
|
+
return false;
|
|
176
|
+
try {
|
|
177
|
+
if (navigator.clipboard) {
|
|
178
|
+
await navigator.clipboard.writeText(text);
|
|
179
|
+
return true;
|
|
180
|
+
}
|
|
181
|
+
// 降级方案
|
|
182
|
+
const textArea = document.createElement('textarea');
|
|
183
|
+
textArea.value = text;
|
|
184
|
+
textArea.style.position = 'fixed';
|
|
185
|
+
textArea.style.opacity = '0';
|
|
186
|
+
document.body.appendChild(textArea);
|
|
187
|
+
textArea.select();
|
|
188
|
+
const success = document.execCommand('copy');
|
|
189
|
+
document.body.removeChild(textArea);
|
|
190
|
+
return success;
|
|
191
|
+
}
|
|
192
|
+
catch {
|
|
193
|
+
return false;
|
|
194
|
+
}
|
|
195
|
+
},
|
|
196
|
+
/**
|
|
197
|
+
* 监听元素大小变化
|
|
198
|
+
* @param element 元素
|
|
199
|
+
* @param callback 回调函数
|
|
200
|
+
* @returns 取消监听的函数
|
|
201
|
+
*/
|
|
202
|
+
observeResize(element, callback) {
|
|
203
|
+
if (!this.isBrowser() || !window.ResizeObserver) {
|
|
204
|
+
return () => { };
|
|
205
|
+
}
|
|
206
|
+
const observer = new ResizeObserver(entries => {
|
|
207
|
+
entries.forEach(callback);
|
|
208
|
+
});
|
|
209
|
+
observer.observe(element);
|
|
210
|
+
return () => observer.disconnect();
|
|
211
|
+
},
|
|
212
|
+
/**
|
|
213
|
+
* 导入cdn的方法
|
|
214
|
+
* @param url 需要导入的文件
|
|
215
|
+
* @param name 名称
|
|
216
|
+
*/
|
|
217
|
+
importCDN(url, name) {
|
|
218
|
+
new Promise(resolve => {
|
|
219
|
+
const dom = document.createElement('script');
|
|
220
|
+
dom.src = url;
|
|
221
|
+
dom.type = 'text/javascript';
|
|
222
|
+
dom.onload = () => {
|
|
223
|
+
resolve(window[name]);
|
|
224
|
+
};
|
|
225
|
+
if (document.head !== null) {
|
|
226
|
+
document.head.appendChild(dom);
|
|
227
|
+
}
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
};
|
|
231
|
+
|
|
232
|
+
export { domUtils as default };
|
|
233
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/browser/domUtils/index.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* URL工具函数
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* 获取url的参数
|
|
6
|
+
* @param url - URL字符串,默认为当前页面URL
|
|
7
|
+
* @returns 参数对象
|
|
8
|
+
*/
|
|
9
|
+
declare function getUrlParams<T = any>(url?: string): T;
|
|
10
|
+
/**
|
|
11
|
+
* 刷新url的状态
|
|
12
|
+
* @param data - 需要更新的参数对象
|
|
13
|
+
*/
|
|
14
|
+
declare function refreshUrlState(data: Record<string, string>): void;
|
|
15
|
+
type TSetUrlParams = {
|
|
16
|
+
pathname: string;
|
|
17
|
+
query: Record<string, any>;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* 设置URL参数
|
|
21
|
+
* @param params - 包含路径和查询参数的对象
|
|
22
|
+
* @returns 完整的URL字符串
|
|
23
|
+
*/
|
|
24
|
+
declare function setUrlParams(params: TSetUrlParams): string;
|
|
25
|
+
/**
|
|
26
|
+
* 构建查询参数字符串
|
|
27
|
+
* 该函数接收一个对象,将对象中的键值对转换为URL编码格式的查询参数字符串。
|
|
28
|
+
* 对于对象中的数组值,采用`repeat`模式,即数组中的每个元素都会单独形成一个键值对。
|
|
29
|
+
* @param params - 包含查询参数的对象,键为字符串类型,值可以是基本类型(如string、number、boolean等)或数组类型
|
|
30
|
+
* @returns 拼接好的URL查询参数字符串
|
|
31
|
+
*/
|
|
32
|
+
declare function buildQueryParams(params: any): string;
|
|
33
|
+
/**
|
|
34
|
+
* 获取页面URL中的查询参数
|
|
35
|
+
* 该函数通过解析当前页面URL中 `?` 符号后的部分,提取出所有的查询参数,并以对象形式返回。
|
|
36
|
+
* 如果URL中不存在查询参数部分,则返回一个空对象。
|
|
37
|
+
* @param queryString - 查询字符串
|
|
38
|
+
* @returns 解析后的查询参数对象,键为参数名,值为对应的参数值,重复的参数名将被合并到一个数组中
|
|
39
|
+
*/
|
|
40
|
+
declare function getPageQueryParams(queryString: string): any;
|
|
41
|
+
/**
|
|
42
|
+
* 更新URL中的参数 -> 得到新的url
|
|
43
|
+
* @param href - 原始URL
|
|
44
|
+
* @param params - 需要更新的参数
|
|
45
|
+
* @returns 新的URL
|
|
46
|
+
*/
|
|
47
|
+
declare function getUpdateUrl(href: string, params: Record<string, string>): string;
|
|
48
|
+
/**
|
|
49
|
+
* 将对象转换为URL参数字符串
|
|
50
|
+
* @param param - 将要转为URL参数字符串的对象
|
|
51
|
+
* @param prefix - URL参数字符串的前缀
|
|
52
|
+
* @param encode - 是否进行URL编码,默认为true
|
|
53
|
+
* @returns URL参数字符串
|
|
54
|
+
*/
|
|
55
|
+
declare function urlEncode(param: any, prefix?: string, encode?: boolean): string;
|
|
56
|
+
/**
|
|
57
|
+
* URL工具对象
|
|
58
|
+
*/
|
|
59
|
+
declare const urlUtils: {
|
|
60
|
+
getUrlParams: typeof getUrlParams;
|
|
61
|
+
getLocalPath: (url: string, index?: number) => string;
|
|
62
|
+
getWebLocalPath: (index?: number) => string;
|
|
63
|
+
refreshUrlState: typeof refreshUrlState;
|
|
64
|
+
setUrlParams: typeof setUrlParams;
|
|
65
|
+
buildQueryParams: typeof buildQueryParams;
|
|
66
|
+
getPageQueryParams: typeof getPageQueryParams;
|
|
67
|
+
getUpdateUrl: typeof getUpdateUrl;
|
|
68
|
+
urlEncode: typeof urlEncode;
|
|
69
|
+
urlToList: (url?: string) => string[];
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
export { buildQueryParams, urlUtils as default, getPageQueryParams, getUpdateUrl, getUrlParams, refreshUrlState, setUrlParams, urlEncode };
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* URL工具函数
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* 获取url的参数
|
|
6
|
+
* @param url - URL字符串,默认为当前页面URL
|
|
7
|
+
* @returns 参数对象
|
|
8
|
+
*/
|
|
9
|
+
function getUrlParams(url) {
|
|
10
|
+
if (!url && typeof window !== 'undefined') {
|
|
11
|
+
url = window.location.href;
|
|
12
|
+
}
|
|
13
|
+
const theRequest = {};
|
|
14
|
+
if (!url) {
|
|
15
|
+
console.error('无效的url');
|
|
16
|
+
return theRequest;
|
|
17
|
+
}
|
|
18
|
+
const queryIndex = url.indexOf('?');
|
|
19
|
+
if (queryIndex !== -1) {
|
|
20
|
+
const str = url.slice(queryIndex + 1);
|
|
21
|
+
const pairs = str.split('&');
|
|
22
|
+
for (const pair of pairs) {
|
|
23
|
+
const [key, value] = pair.split('=');
|
|
24
|
+
if (key) {
|
|
25
|
+
theRequest[decodeURIComponent(key)] = decodeURIComponent(value || '');
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return theRequest;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* 从url中获取指定位置的路径字符串
|
|
33
|
+
* @param url - 需要获取的url
|
|
34
|
+
* @param index - 如果是-1则是最后一个,如果是0则是第一个
|
|
35
|
+
* @returns 路径字符串
|
|
36
|
+
*/
|
|
37
|
+
const getLocalPath = (url, index = -1) => {
|
|
38
|
+
// url要去掉开头的//和后面的参数。然后用剩下的。如果它有的话
|
|
39
|
+
if (url.startsWith('http')) {
|
|
40
|
+
// 说明是完整的url。现在只需要pathname
|
|
41
|
+
url = new URL(url).pathname;
|
|
42
|
+
}
|
|
43
|
+
// 去掉开头的/
|
|
44
|
+
url = url.replace(/^\//, '');
|
|
45
|
+
// 拆成数组
|
|
46
|
+
const urlArr = url.split('/');
|
|
47
|
+
// 如果是-1则返回最后一个
|
|
48
|
+
if (index === -1) {
|
|
49
|
+
return urlArr[urlArr.length - 1];
|
|
50
|
+
}
|
|
51
|
+
return urlArr[index];
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* 从当前页面URL中获取指定位置的路径字符串
|
|
55
|
+
* @param index - 如果是-1则是最后一个,如果是0则是第一个,默认是最后一个
|
|
56
|
+
* @returns 路径字符串
|
|
57
|
+
*/
|
|
58
|
+
const getWebLocalPath = (index = -1) => {
|
|
59
|
+
if (!window) {
|
|
60
|
+
return '';
|
|
61
|
+
}
|
|
62
|
+
return getLocalPath(window.location.pathname, index);
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* 刷新url的状态
|
|
66
|
+
* @param data - 需要更新的参数对象
|
|
67
|
+
*/
|
|
68
|
+
function refreshUrlState(data) {
|
|
69
|
+
if (!window) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
const searchStr = window.location.href;
|
|
73
|
+
// 问号前面的
|
|
74
|
+
const url = searchStr.substring(0, searchStr.indexOf('?'));
|
|
75
|
+
const newUrl = setUrlParams({ pathname: url, query: data });
|
|
76
|
+
window.history.replaceState(null, '', newUrl);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* 设置URL参数
|
|
80
|
+
* @param params - 包含路径和查询参数的对象
|
|
81
|
+
* @returns 完整的URL字符串
|
|
82
|
+
*/
|
|
83
|
+
function setUrlParams(params) {
|
|
84
|
+
const { query } = params;
|
|
85
|
+
let { pathname } = params;
|
|
86
|
+
if (typeof query === 'object') {
|
|
87
|
+
// 开始拼接
|
|
88
|
+
Object.keys(query).forEach((key, index) => {
|
|
89
|
+
// 判断数据是否存在
|
|
90
|
+
if (query[key] !== undefined && query[key] !== null && query[key] !== '') {
|
|
91
|
+
if (index === 0) {
|
|
92
|
+
pathname = `${pathname}?${key}=${query[key]}`;
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
pathname = `${pathname}&${key}=${query[key]}`;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
return pathname;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* 构建查询参数字符串
|
|
104
|
+
* 该函数接收一个对象,将对象中的键值对转换为URL编码格式的查询参数字符串。
|
|
105
|
+
* 对于对象中的数组值,采用`repeat`模式,即数组中的每个元素都会单独形成一个键值对。
|
|
106
|
+
* @param params - 包含查询参数的对象,键为字符串类型,值可以是基本类型(如string、number、boolean等)或数组类型
|
|
107
|
+
* @returns 拼接好的URL查询参数字符串
|
|
108
|
+
*/
|
|
109
|
+
function buildQueryParams(params) {
|
|
110
|
+
const paramPairs = [];
|
|
111
|
+
for (const key in params) {
|
|
112
|
+
const value = params[key];
|
|
113
|
+
if (Array.isArray(value)) {
|
|
114
|
+
value.forEach(v => {
|
|
115
|
+
paramPairs.push(`${encodeURIComponent(key)}=${encodeURIComponent(v)}`);
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
paramPairs.push(`${encodeURIComponent(key)}=${encodeURIComponent(value)}`);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return paramPairs.join('&');
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* 获取页面URL中的查询参数
|
|
126
|
+
* 该函数通过解析当前页面URL中 `?` 符号后的部分,提取出所有的查询参数,并以对象形式返回。
|
|
127
|
+
* 如果URL中不存在查询参数部分,则返回一个空对象。
|
|
128
|
+
* @param queryString - 查询字符串
|
|
129
|
+
* @returns 解析后的查询参数对象,键为参数名,值为对应的参数值,重复的参数名将被合并到一个数组中
|
|
130
|
+
*/
|
|
131
|
+
function getPageQueryParams(queryString) {
|
|
132
|
+
// 如果没有查询字符串,说明没有查询参数,直接返回一个空对象
|
|
133
|
+
if (!queryString) {
|
|
134
|
+
return {};
|
|
135
|
+
}
|
|
136
|
+
const queryParams = {};
|
|
137
|
+
// 将查询字符串按 '&' 分割成多个键值对
|
|
138
|
+
const pairs = queryString.split('&');
|
|
139
|
+
pairs.forEach(pair => {
|
|
140
|
+
// 对每一个键值对按 '=' 分开,分别得到键和值
|
|
141
|
+
const [key, value] = pair.split('=');
|
|
142
|
+
// 对键和值进行URL解码
|
|
143
|
+
const decodedKey = decodeURIComponent(key);
|
|
144
|
+
const decodedValue = decodeURIComponent(value);
|
|
145
|
+
// 处理重复参数:如果某个键已经存在于 queryParams 中
|
|
146
|
+
if (queryParams[decodedKey]) {
|
|
147
|
+
// 检查它是不是数组
|
|
148
|
+
if (Array.isArray(queryParams[decodedKey])) {
|
|
149
|
+
// 如果是数组,直接把新值 push 进去
|
|
150
|
+
queryParams[decodedKey].push(decodedValue);
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
// 如果不是数组,把它变成数组,再把新值 push 进去
|
|
154
|
+
queryParams[decodedKey] = [queryParams[decodedKey], decodedValue];
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
// 如果是新键,直接赋值
|
|
159
|
+
queryParams[decodedKey] = decodedValue;
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
return queryParams;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* 更新URL中的参数 -> 得到新的url
|
|
166
|
+
* @param href - 原始URL
|
|
167
|
+
* @param params - 需要更新的参数
|
|
168
|
+
* @returns 新的URL
|
|
169
|
+
*/
|
|
170
|
+
function getUpdateUrl(href, params) {
|
|
171
|
+
if (!window) {
|
|
172
|
+
return '';
|
|
173
|
+
}
|
|
174
|
+
const searchStr = href || window.location.href;
|
|
175
|
+
const oldParams = getUrlParams(searchStr);
|
|
176
|
+
const newParams = { ...oldParams, ...params };
|
|
177
|
+
// 问号前面的
|
|
178
|
+
const url = searchStr.substring(0, searchStr.indexOf('?'));
|
|
179
|
+
return setUrlParams({ pathname: url, query: newParams });
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* 将对象转换为URL参数字符串
|
|
183
|
+
* @param param - 将要转为URL参数字符串的对象
|
|
184
|
+
* @param prefix - URL参数字符串的前缀
|
|
185
|
+
* @param encode - 是否进行URL编码,默认为true
|
|
186
|
+
* @returns URL参数字符串
|
|
187
|
+
*/
|
|
188
|
+
function urlEncode(param, prefix, encode = true) {
|
|
189
|
+
if (param === null)
|
|
190
|
+
return '';
|
|
191
|
+
let paramStr = '';
|
|
192
|
+
const t = typeof param;
|
|
193
|
+
if (t === 'string' || t === 'number' || t === 'boolean') {
|
|
194
|
+
paramStr += `&${prefix}=${encode ? encodeURIComponent(param) : param}`;
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
Object.keys(param).forEach(key => {
|
|
198
|
+
key = prefix === null ? key : prefix + (param instanceof Array ? `[${key}]` : `.${key}`);
|
|
199
|
+
paramStr += urlEncode(param[key], key, encode);
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
return paramStr;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* URL转换为路径列表
|
|
206
|
+
* @param url - URL字符串
|
|
207
|
+
* @returns 路径数组
|
|
208
|
+
*/
|
|
209
|
+
const urlToList = (url) => {
|
|
210
|
+
if (!url || url === '/') {
|
|
211
|
+
return ['/'];
|
|
212
|
+
}
|
|
213
|
+
// 去掉协议、域名、查询串和 hash,只保留 pathname
|
|
214
|
+
let pathname = url;
|
|
215
|
+
try {
|
|
216
|
+
// 如果是完整 URL,用 URL 对象解析
|
|
217
|
+
if (url.startsWith('http://') || url.startsWith('https://')) {
|
|
218
|
+
pathname = new URL(url).pathname;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
catch {
|
|
222
|
+
// 如果解析失败,继续用原字符串
|
|
223
|
+
}
|
|
224
|
+
// 去掉开头的 /
|
|
225
|
+
pathname = pathname.replace(/^\/+/, '');
|
|
226
|
+
// 拆成数组并过滤空串
|
|
227
|
+
const urlList = pathname.split('/').filter(Boolean);
|
|
228
|
+
// 逐级拼接返回
|
|
229
|
+
return urlList.map((_, index) => `/${urlList.slice(0, index + 1).join('/')}`);
|
|
230
|
+
};
|
|
231
|
+
/**
|
|
232
|
+
* URL工具对象
|
|
233
|
+
*/
|
|
234
|
+
const urlUtils = {
|
|
235
|
+
getUrlParams,
|
|
236
|
+
getLocalPath,
|
|
237
|
+
getWebLocalPath,
|
|
238
|
+
refreshUrlState,
|
|
239
|
+
setUrlParams,
|
|
240
|
+
buildQueryParams,
|
|
241
|
+
getPageQueryParams,
|
|
242
|
+
getUpdateUrl,
|
|
243
|
+
urlEncode,
|
|
244
|
+
urlToList
|
|
245
|
+
};
|
|
246
|
+
|
|
247
|
+
export { buildQueryParams, urlUtils as default, getLocalPath, getPageQueryParams, getUpdateUrl, getUrlParams, getWebLocalPath, refreshUrlState, setUrlParams, urlEncode, urlToList };
|
|
248
|
+
//# sourceMappingURL=index.js.map
|