Web Util
Web Util 是一个提供常用 Web 工具函数的工具包,包含了文件处理、环境检测、事件处理等多种实用功能。
特性
- 提供丰富的文件格式转换功能
- 支持环境检测和浏览器兼容性检查
- 提供事件处理和 DOM 操作工具
- 支持音频播放和语音合成
- 支持文件拖放和粘贴处理
- 提供全局对象和微任务处理
- 支持文本处理和剪贴板操作
安装
npm install @kazura/web-util
使用方法
文件处理
import {
dataURLToBlob,
blobToDataURL,
fileToBase64,
base64ToFile,
formatFileSize,
getFileExtension,
} from '@kazura/web-util'
// DataURL 转 Blob
const blob = dataURLToBlob('data:image/png;base64,...')
// Blob 转 DataURL
const dataURL = await blobToDataURL(blob)
// File 转 Base64
const base64 = await fileToBase64(file)
// Base64 转 File
const file = base64ToFile(base64, 'image.png', 'image/png')
// 格式化文件大小
const size = formatFileSize(1024 * 1024) // '1.00 MB'
// 获取文件扩展名
const ext = getFileExtension('image.png') // 'png'
环境检测
import {
isBrowser,
isIE,
isIE9,
isEdge,
isChrome,
isFirefox,
isPhantomJS,
isAndroid,
isIOS,
isFromWindows,
isFromMac,
isNative,
isHttps,
isHttp,
isInChildFrame,
} from '@kazura/web-util'
// 检查是否在浏览器环境中
if (isBrowser()) {
// 浏览器环境
}
// 检查浏览器类型
if (isChrome()) {
// Chrome 浏览器
} else if (isFirefox()) {
// Firefox 浏览器
} else if (isIE()) {
// IE 浏览器
} else if (isEdge()) {
// Edge 浏览器
}
// 检查设备类型
if (isAndroid()) {
// Android 设备
} else if (isIOS()) {
// iOS 设备
}
// 检查操作系统
if (isFromWindows()) {
// Windows 系统
} else if (isFromMac()) {
// Mac 系统
}
// 检查协议
if (isHttps()) {
// HTTPS 协议
} else if (isHttp()) {
// HTTP 协议
}
// 检查是否在子框架中
if (isInChildFrame()) {
// 在子框架中
}
事件处理
import { addEventListener, registerHandleDrop, registerHandlePaste } from '@kazura/web-util'
// 添加事件监听器
const removeListener = addEventListener(
window,
'resize',
() => {
console.log('Window resized')
},
{ passive: true }
)
// 移除事件监听器
removeListener()
// 注册拖放处理
registerHandleDrop(element, {
onDrop: (files) => {
console.log('Dropped files:', files)
},
})
// 注册粘贴处理
registerHandlePaste(element, {
onPaste: (files) => {
console.log('Pasted files:', files)
},
})
音频处理
import { speak } from '@kazura/web-util'
// 使用语音合成朗读文本
speak('Hello, World!', 'en-US')
文本处理
import { insertAtTextarea, SpaceType } from '@kazura/web-util'
// 在文本区域插入文本
insertAtTextarea(textarea, 'Hello, World!')
// 使用全角空格
const fullWidthSpace = SpaceType.FullWidthSpace
// 使用半角空格
const halfWidthSpace = SpaceType.HalfWidthSpace
剪贴板操作
import { copy } from '@kazura/web-util'
// 复制文本到剪贴板
copy('Hello, World!')
其他工具函数
import {
random,
sleep,
unique,
assert,
withResolvers,
appendScript,
runFn,
queueMicrotask,
getGlobal,
generateUID,
} from '@kazura/web-util'
// 生成随机数
const num = random(1, 100)
// 延时执行
await sleep(1000)
// 数组去重
const uniqueArray = unique([1, 2, 2, 3, 3, 4])
// 断言
assert(condition, 'Condition not met')
// 创建带解析器的 Promise
const { promise, resolve, reject } = withResolvers()
// 动态加载脚本
appendScript('https://example.com/script.js', true)
// 执行函数并包装结果
const result = await runFn(() => someAsyncOperation())
// 添加微任务
queueMicrotask(() => {
console.log('Microtask executed')
})
// 获取全局对象
const global = getGlobal()
// 生成唯一标识符
const uid = generateUID()
API 参考
文件处理函数
dataURLToBlob(data: string): Blob- 将 DataURL 转换为 BlobblobToDataURL(blob: Blob): Promise<string>- 将 Blob 转换为 DataURLfileToBase64(file: File): Promise<string>- 将 File 转换为 Base64base64ToFile(data: string, fileName: string, mime: string): File- 将 Base64 转换为 FileformatFileSize(bytes: number): string- 格式化文件大小getFileExtension(file: File | string): string- 获取文件扩展名
环境检测函数
isBrowser(): boolean- 检查是否在浏览器环境中isIE(): boolean- 检查是否为 IE 浏览器isIE9(): boolean- 检查是否为 IE 9isEdge(): boolean- 检查是否为 Edge 浏览器isChrome(): boolean- 检查是否为 Chrome 浏览器isFirefox(): boolean- 检查是否为 Firefox 浏览器isPhantomJS(): boolean- 检查是否为 PhantomJS 浏览器isAndroid(): boolean- 检查是否为 Android 设备isIOS(): boolean- 检查是否为 iOS 设备isFromWindows(): boolean- 检查是否为 Windows 系统isFromMac(): boolean- 检查是否为 Mac 系统isNative(Ctor: any): boolean- 检查函数是否为原生函数isHttps(): boolean- 检查是否为 HTTPS 协议isHttp(): boolean- 检查是否为 HTTP 协议isInChildFrame(): boolean- 检查是否在子框架中
事件处理函数
addEventListener(target: EventTarget, type: string, listener: EventListener, options?: boolean | AddEventListenerOptions): () => void- 添加事件监听器registerHandleDrop(element: HTMLElement, options: { onDrop: (files: File[]) => void }): void- 注册拖放处理registerHandlePaste(element: HTMLElement, options: { onPaste: (files: File[]) => void }): void- 注册粘贴处理
音频处理函数
speak(text: string, lang: string): void- 使用语音合成朗读文本