@mt-kit/utils
Version:
518 lines (376 loc) • 10.8 kB
Markdown
# @mt-kit/utils
## 下载
```bash
npm i @mt-kit/utils
```
## 使用
[See](https://github.com/Not-have/micro-tools/tree/main/packages-utils/stories)
## API
### animationFrameThrottle
- 使用 requestAnimationFrame 创建函数节流版本,限制函数在特定时间内的调用次数
| 参数名 | 说明 | 是否必穿 |
| ----------- | ------------------------- | ----------|
| fn | 回调函数 | 是 |
```ts
// 滚动事件处理
window.addEventListener('scroll', animationFrameThrottle(handleScroll));
// 窗口大小改变
window.addEventListener('resize', animationFrameThrottle(handleResize));
// 动画效果
const animatedFunction = animationFrameThrottle(updateAnimation);
```
### imageBase64ToBlob
- 将 Base64 格式的图片转换为 Blob 对象
| 参数名 | 说明 | 是否必穿 |
| ----------- | ----------- | ----------- |
| base64 | 图片base64 | 是 |
```ts
const base64Data = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...';
const blob = imageBase64ToBlob(base64Data);
```
### imageUrlToBase64
- 将图片 URL 转换为 Base64 格式
| 参数名 | 说明 | 是否必穿 | 默认值 |
| ----------- | ----------- | ----------- | ----------- |
| url | 图片url | 是 | - |
| mineType | 用于指定生成的 base64 字符串的 MIME 类型 | 否 | image/png |
```ts
imageUrlToBase64('https://example.com/image.png')
.then(base64 => {
console.log(base64); // data:image/png;base64,...
});
```
### downloadByUrl
- 根据文件地址进行下载
| 参数名 | 说明 | 是否必穿 |
| ----------- | ----------- | ----------- |
| url | 图片url | 是 |
| target | 链接的打开方式,默认为 '_blank' | 否 |
| fileName | 文件名 | 否 |
```ts
downloadByUrl({
url: 'https://example.com/document.pdf',
target: '_blank',
fileName: 'my-document.pdf'
});
```
### downloadDataFile
- 根据文件数据进行下载
| 参数名 | 说明 | 是否必穿 |
| -------- | ------- | ----------|
| data | Blob 对象的 BlobPart 参数 | 是 |
| filename | 保存的文件名 |是 |
| mime | 文件的 MIME 类型 | 否 |
| blob | Blob 对象的 BlobPart 参数 | 否 |
```ts
const data = new Uint8Array([72, 101, 108, 108, 111]); // "Hello" 的 ASCII 码
downloadDataFile(data, 'hello.txt', 'text/plain');
```
### downloadBase64File
- 根据 Base64 数据下载文件
| 参数名 | 说明 | 是否必穿 |
| -------- | ------- | ----------|
| base64 | base64字符串 | 是 |
| filename | 保存的文件名 |是 |
| blob | 文件的 MIME 类型 | 否 |
```ts
const base64Data = 'data:text/plain;base64,SGVsbG8gV29ybGQh'; // "Hello World!"
downloadBase64File(base64Data, 'hello.txt');
```
### downloadUrlFile
- 根据在线图片的 URL 进行下载
| 参数名 | 说明 | 是否必穿 |
| -------- | ------- | ----------|
| url | 图片url | 是 |
| filename | 保存的文件名 |是 |
| mime | 文件的 MIME 类型 | 否 |
| blob | Blob 对象的 BlobPart 参数 | 否 |
```ts
downloadUrlFile(
'https://example.com/image.png',
'my-image.png',
'image/png'
);
```
### copyText
- 复制文本到剪贴板
| 参数名 | 说明 | 是否必穿 |
| -------- | ------- | ----------|
| text | 要复制的文本 | 是 |
| fn | 复制成功的回调 | 否 |
```ts
copyText('Hello World!').then(() => {
console.log('文本已复制到剪贴板');
});
```
### queryStringToObject
- 将查询字符串转换为对象
| 参数名 | 说明 | 是否必穿 |
| -------- | ------- | ----------|
| queryString | 查询字符串 | 是 |
```ts
const query = queryStringToObject('?name=John&age=30');
console.log(query); // { name: 'John', age: '30' }
```
### openWindow
- 打开新窗口
| 参数名 | 说明 | 是否必穿 |
| -------- | ------- | ----------|
| url | 链接地址 | 是 |
| options | 链接的打开方式,默认为 '_blank' | 否 |
```ts
openWindow('https://example.com', {
target: '_blank',
features: 'width=800,height=600'
});
```
### cookieHelper
- Cookie 操作助手
| 参数名 | 说明 | 是否必穿 |
| -------- | ------- | ----------|
| name | cookie名称 | 是 |
| value | cookie值 | 是 |
| options | cookie的配置选项 | 否 |
方法:
- get(name) : 获取指定名称的 cookie
- set(name, value, options) : 设置 cookie
- remove(name) : 删除指定名称的 cookie
```ts
// 设置 cookie
cookieHelper.set('username', 'John', { expires: 7 }); // 7天过期
// 获取 cookie
const username = cookieHelper.get('username');
// 删除 cookie
cookieHelper.remove('username');
```
### localStorageHelper
- localStorage 操作助手
| 参数名 | 说明 | 是否必穿 |
| -------- | ------- | ----------|
| name | 本地存储名称 | 是 |
| value | 本地存储值 | 是 |
方法:
- get(name) : 获取指定名称的本地存储
- set(name, value) : 设置本地存储
- remove(name) : 删除指定名称的本地存储
- clear() : 清空所有数据
```ts
// 设置数据
localStorageHelper.set('user', { name: 'John', age: 30 });
// 获取数据
const user = localStorageHelper.get('user');
// 删除数据
localStorageHelper.remove('user');
// 清空所有数据
localStorageHelper.clear();
```
### isElement
- 判断是否为 DOM 元素
| 参数名 | 说明 | 是否必穿 |
| -------- | ------- | ----------|
| element | 元素 | 是 |
```ts
const div = document.createElement('div');
console.log(isElement(div)); // true
console.log(isElement({})); // false
```
### isFunction
- 判断是否为函数
| 参数名 | 说明 | 是否必穿 |
| -------- | ------- | ----------|
| fn | 函数 | 是 |
```ts
console.log(isFunction(() => {})); // true
console.log(isFunction({})); // false
```
### isEqual
- 比较两个对象是否相等
| 参数名 | 说明 | 是否必穿 |
| -------- | ------- | ----------|
| a | 比较值 | 是 |
| b | 比较值 | 是 |
```ts
const objA = { a: 1, b: { c: 2 } };
const objB = { a: 1, b: { c: 2 } };
const objC = { a: 1, b: { c: 3 } };
console.log(isEqual(objA, objB)); // true
console.log(isEqual(objA, objC)); // false
```
### isNull
- 判断是否为 null
| 参数名 | 说明 | 是否必穿 |
| -------- | ------- | ----------|
| value | 值 | 是 |
```ts
console.log(isNull(null)); // true
console.log(isNull(undefined)); // false
console.log(isNull(0)); // false
```
### isObject
- 判断是否为对象类型
| 参数名 | 说明 | 是否必穿 |
| -------- | ------- | ----------|
| value | 值 | 是 |
```ts
console.log(isObject({})); // true
console.log(isObject([])); // true
console.log(isObject(null)); // false
console.log(isObject('string')); // false
```
### isUndefined
- 判断是否为 undefined
| 参数名 | 说明 | 是否必穿 |
| -------- | ------- | ----------|
| value | 值 | 是 |
```ts
console.log(isUndefined(undefined)); // true
console.log(isUndefined(null)); // false
console.log(isUndefined(0)); // false
```
### clone
- 浅拷贝对象
| 参数名 | 说明 | 是否必穿 |
| -------- | ------- | ----------|
| value | 值 | 是 |
```ts
const obj = { a: 1, b: { c: 2 } };
const cloned = clone(obj);
console.log(cloned); // { a: 1, b: { c: 2 } }
console.log(cloned.b === obj.b); // true,浅拷贝,引用相同
```
### cloneDeep
- 深拷贝对象
| 参数名 | 说明 | 是否必穿 |
| -------- | ------- | ----------|
| value | 值 | 是 |
```ts
const obj = { a: 1, b: { c: 2 } };
const cloned = cloneDeep(obj);
console.log(cloned); // { a: 1, b: { c: 2 } }
console.log(cloned.b === obj.b); // false,深拷贝,引用不同
```
### debounce
- 创建一个防抖函数,延迟调用函数直到上一次调用后的一段时间已经过去
| 参数名 | 说明 | 是否必穿 |
| -------- | ------- | ----------|
| fn | 要防抖的函数 | 是 |
| wait | 延迟时间(毫秒) | 是 |
| options | 配置选项 | 否 |
```ts
// 搜索输入防抖
const debouncedSearch = debounce((query) => {
fetchSearchResults(query);
}, 300);
// 在输入框中使用
inputElement.addEventListener('input', (e) => {
debouncedSearch(e.target.value);
});
```
### throttle
- 创建一个节流函数,限制函数在一段时间内只能调用一次
| 参数名 | 说明 | 是否必穿 |
| -------- | ------- | ----------|
| fn | 要节流的函数 | 是 |
| wait | 节流时间(毫秒) | 是 |
| options | 配置选项 | 否 |
```ts
// 滚动事件节流
const throttledScroll = throttle(() => {
updateScrollPosition();
}, 100);
// 在滚动事件中使用
window.addEventListener('scroll', throttledScroll);
```
### omitBy
- 创建一个从对象中排除满足条件的属性的新对象
| 参数名 | 说明 | 是否必穿 |
| -------- | ------- | ----------|
| obj | 源对象 | 是 |
| condition | 用于判断是否排除属性的条件函数 | 是 |
```ts
const sampleObject = {
a: 1,
b: 2,
c: 3,
d: 4,
};
// 从对象中排除值大于 2 的属性
const result = omitBy(sampleObject, (value) => value > 2);
console.log(result); // { a: 1, b: 2 }
```
### objectValueToString
- 将对象的值转换为字符串
| 参数名 | 说明 | 是否必穿 |
| -------- | ------- | ----------|
| obj | 源对象 | 是 |
```ts
const obj = {
id: 123,
active: true,
score: 98.5
};
const stringified = objectValueToString(obj);
console.log(stringified);
// 输出: { id: '123', active: 'true', score: '98.5' }
```
### IframeMessage
- 创建一个 iframe 便签,与内嵌的页面进行通讯
调用界面
```tsx
import {
JSX,
useCallback,
useMemo
} from "react";
import {
IframeMessage
} from "@mt-kit/utils";
export default function DemoIframeMessage(): JSX.Element {
const url = "http://localhost:5173/";
const iframe = useMemo(() => {
const communicator = new IframeMessage();
communicator.createIframe(url);
return communicator;
}, [url]);
const handleClick = useCallback(() => {
iframe.postMessage({
type: "message",
data: {
name: "hello",
age: 18
}
});
}, [iframe]);
return <div>
<p>iframe 通信</p>
<button onClick={handleClick}>传值</button>
</div>;
}
```
接收通信
```vue
<script setup lang="ts">
import {
onMounted,
onUnmounted
} from "vue";
import {
Message,
IframeMessage
} from "@mt-kit/utils";
const iframe = new IframeMessage();
const handleMessage = (e: Message ): void => {
console.log(e);
};
onMounted(() => {
iframe.onMessage(handleMessage);
});
onUnmounted(() => {
iframe.removeMessageListener(handleMessage);
});
</script>
<template>
</template>
<style scoped>
</style>
```