# Pandora.js 完整 API 文档
## 📖 简介
Pandora.js 是一款专为新手优化的 JavaScript 插件,提供前端开发中常用的功能模块,API 设计简洁,支持链式调用。
### 核心特性
- **轻量级**:零依赖,开箱即用
- **链式调用**:大多数方法支持链式写法
- **原生 JS**:基于原生 JavaScript 实现,兼容性好
- **功能丰富**:涵盖 DOM 操作、网络请求、组件交互等
### 快速开始
```html
```
---
## 1️⃣ 基础工具函数
### 1.1 alert - 自定义提示框
**功能说明**:
- 提供美观的自定义提示框,替代原生 alert
- 支持自定义显示时间和主题样式
- 支持点击遮罩立即关闭
- 具有平滑的淡入淡出动画效果
**使用方式**:
```javascript
alert(content, speed = 800)
```
**参数说明**:
- `content` (string): 提示内容
- `speed` (number, 可选): 自动消失时间(毫秒),默认 800ms
**示例**:
```javascript
// 基础用法
alert('操作成功!')
// 自定义显示时间
alert('加载中...', 2000) // 2秒后消失
```
**CSS 变量自定义**:
```css
:root {
--alertTheme: #fff; /* 背景色 */
--alertBg: transparent; /* 遮罩色 */
--alertFontSize: 1rem; /* 字体大小 */
--alertColor: #000; /* 字体颜色 */
}
```
**全局配置**:
```javascript
// 禁用 alert 重写
window.resetAlert = false
```
---
### 1.2 confirm - 自定义确认框
**功能说明**:
- 提供美观的自定义确认框,替代原生 confirm
- 返回 Promise 对象,支持异步回调
- 支持自定义按钮文本、标题和内容
- 支持显示/隐藏确认和取消按钮
- 支持主题样式自定义
**使用方式**:
```javascript
confirm(config)
```
**参数说明**:
```javascript
{
title: '标题', // 可选
content: '确认内容', // 可选
confirmText: '确认', // 可选,默认"确认"
cancelText: '取消', // 可选,默认"取消"
showConfirm: true, // 可选,是否显示确认按钮
showCancel: true, // 可选,是否显示取消按钮
success() {}, // 可选,确认回调
fail() {} // 可选,取消回调
}
```
**示例**:
```javascript
// 基础用法
confirm('确定要删除吗?').then(() => {
console.log('确认')
}).catch(() => {
console.log('取消')
})
// 完整配置
confirm({
title: '提示',
content: '是否继续操作?',
confirmText: '继续',
cancelText: '放弃',
showConfirm: true,
showCancel: true
}).then(() => {
console.log('确认回调')
}).catch(() => {
console.log('取消回调')
})
// 仅显示确认按钮
confirm({
content: '操作完成',
showCancel: false
}).then(() => {
console.log('已确认')
})
```
**CSS 变量自定义**:
```css
:root {
--confirmTheme: #fff; /* 背景色 */
--confirmBg: transparent; /* 遮罩色 */
--confirmFontSize: 1rem; /* 字体大小 */
--confirmColor: #636363; /* 字体颜色 */
--confirmBtnBg: #fafafa; /* 按钮背景 */
--confirmBtnColor: #636363; /* 按钮文字颜色 */
--confirmBtnBorder: #f1f1f1; /* 按钮边框颜色 */
}
```
**全局配置**:
```javascript
// 禁用 confirm 重写
window.resetConfirm = false
```
---
### 1.3 showLoading / hideLoading - 加载遮罩
**功能说明**:
- 显示全屏加载遮罩层
- 支持显示进度文字或数字
- 使用 SVG 加载动画图标
- 可随时调用 hideLoading 关闭遮罩
**使用方式**:
```javascript
showLoading(progress = null)
hideLoading()
```
**参数说明**:
- `progress` (string | number, 可选): 显示进度文字或百分比
**示例**:
```javascript
// 基础用法
showLoading()
setTimeout(() => hideLoading(), 2000)
// 显示进度
showLoading('加载中 50%...')
setTimeout(() => {
showLoading('加载中 80%...')
setTimeout(() => hideLoading(), 1000)
}, 1000)
// 显示数字进度
showLoading(25) // 显示 25%
```
---
## 2️⃣ DOM 操作
### 2.1 选择器方法
**功能说明**:
- 支持 CSS 选择器语法选择 DOM 元素
- 返回 Pandora 实例,支持链式调用
- 支持类选择器、ID 选择器、标签选择器等
- 支持层级选择器
**使用方式**:
```javascript
const $ = Pandora
```
**示例**:
```javascript
// 基础选择
$('.class') // 类选择器
$('#id') // ID 选择器
$('div') // 标签选择器
$('.class .child') // 层级选择器
// 链式操作
$('#box')
.find('.item')
.eq(0)
.addClass('active')
.css({ color: 'red' })
```
---
### 2.2 元素遍历与筛选
**功能说明**:
- 支持通过索引选择指定元素
- 支持选择父级、子级、同级元素
- 支持遍历元素集合
- 返回新的 Pandora 实例,支持链式调用
**示例**:
```javascript
// eq(index) - 选择指定下标元素
$('.item').eq(0).text()
$('.item').eq(2).css('color', 'red')
// child(name) - 选择子级元素
$('#box').child('.item')
// find(name) - 查找所有子级元素
$('#box').find('.item')
// parent() - 选择父级
$('.item').parent()
// siblings(name) - 选择同级元素
$('.item').siblings()
$('.item').siblings('.active')
// prev() - 上一个同级元素
$('.item').prev()
// next() - 下一个同级元素
$('.item').next()
// first() - 第一个元素
$('.item').first()
// last() - 最后一个元素
$('.item').last()
// each(fn) - 遍历元素
$('.item').each((el, index) => {
console.log(index, el.text())
})
```
---
### 2.3 样式操作
**功能说明**:
- 支持获取和设置元素样式
- 支持获取元素位置和尺寸信息
- 支持显示/隐藏元素
- 支持淡入淡出动画效果
**示例**:
```javascript
// css(name) - 获取样式
const color = $('#box').css('color')
const width = $('#box').css('width')
// css({key: value}) - 设置样式
$('#box').css({
'color': 'red',
'font-size': '14px',
'background': '#f0f0f0'
})
// show(callback) - 显示
$('#box').show(() => console.log('显示完成'))
// hide(callback) - 隐藏
$('#box').hide(() => console.log('隐藏完成'))
// fadeIn(speed, callback) - 淡入
$('#box').fadeIn('fast') // fast: 快速
$('#box').fadeIn('slow') // slow: 慢速
$('#box').fadeIn(5) // 自定义速度(数字)
// fadeOut(speed, callback) - 淡出
$('#box').fadeOut('fast')
// offset() - 获取位置信息
const rect = $('#box').offset()
// { x, y, width, height, top, left, right, bottom }
// width(width) - 获取/设置宽度
const w = $('#box').width()
$('#box').width('100px')
$('#box').width('50%')
// height(height) - 获取/设置高度
const h = $('#box').height()
$('#box').height('100px')
```
---
### 2.4 内容操作
**功能说明**:
- 支持获取和设置元素的文本内容
- 支持获取和设置元素的 HTML 内容
- 支持获取和设置表单元素的值
- 支持在元素内部追加或前置内容
**示例**:
```javascript
// text(str) - 获取/设置文本
const txt = $('#box').text()
$('#box').text('新内容')
// html(content) - 获取/设置HTML
const html = $('#box').html()
$('#box').html('
新内容
')
// val(value) - 获取/设置表单值
const v = $('#input').val()
$('#input').val('新值')
$('#select').val('option1')
// append(target) - 追加内容
$('#box').append('追加内容
')
$('#box').append(domElement)
// prepend(target) - 前置内容
$('#box').prepend('前置内容
')
// empty() - 清空容器
$('#box').empty()
// remove() - 移除元素
$('#box').remove()
```
---
### 2.5 属性与类名操作
**功能说明**:
- 支持获取和设置元素属性
- 支持移除元素属性
- 支持添加和移除 CSS 类名
- 支持检查元素是否包含指定类名
**示例**:
```javascript
// attr(name, value) - 获取/设置属性
const src = $('#img').attr('src')
$('#box').attr('data-id', '123')
$('#box').attr({ 'data-id': '123', 'data-name': 'test' })
// removeAttr(name) - 移除属性
$('#box').removeAttr('data-id')
// addClass(name) - 添加类名
$('#box').addClass('active')
$('#box').addClass('active hidden')
// removeClass(name) - 移除类名
$('#box').removeClass('active')
// hasClass(name) - 检查类名
if ($('#box').hasClass('active')) {
console.log('包含 active 类')
}
```
---
### 2.6 事件操作
**功能说明**:
- 支持绑定和解绑事件
- 支持点击、双击、长按等快捷事件
- 支持主动触发事件
- 支持焦点获取和失去
**示例**:
```javascript
// bind(eventName, fn, options) - 绑定事件
$('#box').bind('click', function() {
console.log('点击')
}, { capture: false, once: false, passive: false })
// unbind(eventName) - 解绑事件
$('#box').unbind('click')
// click(fn) - 点击事件
$('#box').click((el, index) => {
console.log('点击元素', index)
})
// dblclick(fn) - 双击事件
$('#box').dblclick(() => console.log('双击'))
// trigger(eventName) - 主动触发事件
$('#box').trigger('click')
// focus() - 获取焦点
$('#input').focus()
// blur() - 失去焦点
$('#input').blur()
// taping(fn, cb) - 长按事件
$('#box').taping(
(ele) => console.log('长按中'),
(ele) => console.log('长按结束')
)
```
---
## 3️⃣ 网络请求
### 3.1 ajax - AJAX 请求
**功能说明**:
- 支持 GET 和 POST 请求
- 支持同步和异步请求
- 支持自定义请求头
- 支持上传进度监听
- 支持取消请求
**使用方式**:
```javascript
$('#').ajax(config)
```
**参数说明**:
```javascript
{
url: '/api/data', // 接口地址
type: 'get', // 请求类型:get/post
async: false, // 是否异步
headers: { // 请求头
'Content-type': 'application/x-www-form-urlencoded'
},
dataType: 'json', // 发送数据类型:json/form
responseType: 'json', // 返回体类型
data: { name: 'value' }, // 发送数据
progress: (p) => { // 加载进度
console.log(p + '%')
},
success: (res) => { // 成功回调
console.log(res)
},
error: (err) => { // 失败回调
console.error(err)
}
}
```
**示例**:
```javascript
// GET 请求
$('#').ajax({
url: '/api/users',
type: 'get',
async: true,
success: (res) => console.log(res)
})
// POST 请求
$('#').ajax({
url: '/api/users',
type: 'post',
dataType: 'json',
data: { name: '张三', age: 18 },
success: (res) => console.log(res)
})
// FormData 上传
const formData = new FormData()
formData.append('file', fileInput.files[0])
$('#').ajax({
url: '/api/upload',
type: 'post',
dataType: 'form',
data: formData,
progress: (p) => console.log(p + '%'),
success: (res) => console.log(res)
})
// 取消请求
window.cancelAjax()
```
---
### 3.2 fetch - Fetch API 封装
**功能说明**:
- 基于 Fetch API 的简洁封装
- 支持 GET 和 POST 请求
- 支持自定义返回数据格式化
- 返回 Promise 对象
**使用方式**:
```javascript
$('#').fetch(config)
```
**参数说明**:
```javascript
{
url: '/api/data',
type: 'get', // get/post
headers: {
'Content-type': 'application/x-www-form-urlencoded'
},
data: { key: 'value' }, // 可选
returnData: (res) => { // 返回数据格式化
return res.json()
}
}
```
**示例**:
```javascript
// GET 请求
$('#').fetch({
url: '/api/data',
returnData: (res) => res.json()
}).then(data => console.log(data))
// POST 请求
$('#').fetch({
url: '/api/data',
type: 'post',
data: { name: 'value' },
returnData: (res) => res.json()
}).then(data => console.log(data))
```
---
## 4️⃣ 表单操作
### 4.1 serialize - 表单序列化
**功能说明**:
- 自动遍历表单内所有带 `name` 属性的元素
- 自动处理 input、select、radio、checkbox 等不同类型
- 返回键值对对象,便于发送到服务器
**示例**:
```javascript
const formData = $('#form').serialize()
// { username: 'admin', password: '123456', gender: 'male' }
```
---
### 4.2 setForm - 设置表单值
**功能说明**:
- 根据对象键名自动匹配表单元素的 `name` 属性
- 自动处理 input、select、radio、checkbox 等不同类型
- 快速填充表单数据
**使用方式**:
```javascript
$('#form').setForm(obj)
```
**示例**:
```javascript
$('#form').setForm({
username: 'admin',
password: '123456',
gender: 'male', // radio
hobbies: ['reading'] // checkbox
})
```
---
## 5️⃣ 模板渲染
### 5.1 Mush - Mustache 模板渲染
**功能说明**:
- 支持 `{{变量}}` 格式的模板语法
- 支持数据响应式,数据变化自动更新视图
- 提供生命周期回调(Init、Update)
- 简化前端数据绑定操作
**使用方式**:
```javascript
$('#container').Mush(config)
```
**参数说明**:
```javascript
{
data: { // 渲染数据
name: '张三',
age: 18
},
Init: (data) => { // 首次渲染完成
console.log('初始渲染', data)
},
Update: (data) => { // 每次更新完成
console.log('数据更新', data)
}
}
```
**示例**:
```javascript
// HTML 模板
// 初始化渲染
$('#container').Mush({
data: {
name: '张三',
age: 18
},
Init: (data) => {
console.log('初始渲染', data)
},
Update: (data) => {
console.log('数据更新', data)
}
})
// 动态更新(会自动更新视图)
$('#container').setData({ name: '李四' })
```
---
### 5.2 全局数据管理
**功能说明**:
- 提供全局数据存储机制
- 支持设置和获取全局数据
- 配合 Mush 模板实现数据共享
**示例**:
```javascript
// setData - 设置全局数据
$('#box').setData({
userInfo: { name: '张三' },
config: { theme: 'dark' }
})
// getData - 获取全局数据
const userInfo = $('#box').getData('userInfo')
```
---
### 5.3 template - 模板加载
**功能说明**:
- 从 `` 标签加载 HTML 模板
- 支持从远程 URL 加载模板
- 自动加载关联的 CSS 和 JS 文件
- 简化页面组件化管理
**使用方式**:
```javascript
$('#container').template(route, container)
```
**示例**:
```javascript
// HTML 模板定义
// 加载模板
$('#container').template('home', document.body)
```
---
## 6️⃣ 路由 - Router
**功能说明**:
- 基于 History API 实现单页应用路由
- 支持路由参数传递
- 自动处理 `` 标签点击事件
- 支持路由回调函数
**使用方式**:
```javascript
$('#app').Router(config)
```
**参数说明**:
```javascript
{
routes: [
{
path: '/',
component: '/pages/home.html',
callback: (state) => console.log('首页', state)
}
]
}
```
**示例**:
```javascript
// 初始化路由
$('#app').Router({
routes: [
{
path: '/',
component: '/pages/home.html',
callback: (state) => console.log('首页', state)
},
{
path: '/about',
component: '/pages/about.html',
callback: (state) => console.log('关于', state)
}
]
})
// 跳转路由
$('#app').to('/about')
$('#app').to('/about?id=123')
// 带参数跳转
$('#app').to('/detail?pid=123&name=test')
```
---
## 7️⃣ 轮播图 - Switcher
**功能说明**:
- 支持滑动和淡入淡出两种切换效果
- 支持触摸手势和鼠标滚轮控制
- 支持自动播放和循环模式
- 支持分页器和悬浮暂停
**使用方式**:
```javascript
$('#slider').Switcher(config)
```
**参数说明**:
```javascript
{
Speed: 1, // 过渡速度(秒)
Curve: 'ease', // 动画曲线
Effect: 'slider', // 切换效果:slider/fade
Direction: 'horizontal', // 方向:horizontal/vertical
Inertia: true, // 惯性回弹
Distance: 3, // 滑动比例
AutoSpeed: 3, // 自动切换间隔(秒),0不自动
Pagination: true, // 分页器
Hover: true, // 悬浮停止
Scroll: true, // 滚轮滚动
InitPage: 0, // 初始页码
Loop: true, // 循环
onChange: (index) => console.log('切换到', index),
AutoResize: true // 窗口变化自动调整
}
```
**示例**:
```javascript
$('#slider').Switcher({
Speed: 1,
Curve: 'ease',
Effect: 'slider',
Direction: 'horizontal',
AutoSpeed: 3,
Pagination: true,
Hover: true,
Loop: true,
onChange: (index) => {
console.log('切换到', index)
}
})
// 控制方法
$('#slider').prev() // 上一页
$('#slider').next() // 下一页
$('#slider').direct(2) // 跳转到指定页
$('#slider').disable() // 禁用
$('#slider').enable() // 启用
```
**HTML 结构**:
```html
```
---
## 8️⃣ 响应式 - AutoSize
**功能说明**:
- 自动计算并设置 ``
- 根据屏幕尺寸设置根元素字体大小
- 支持窗口变化时重新计算
**使用方式**:
```javascript
$('#').AutoSize(config)
```
**参数说明**:
```javascript
{
PageSize: 'device-width', // 固定尺寸
InitScale: 1, // 初始缩放
MinScale: 1, // 最小缩放
MaxScale: 1, // 最大缩放
Ratio: window.devicePixelRatio, // DPI缩放
Resize: true, // 窗口变化重新计算
ScaleFont: true // 缩放字体大小
}
```
**示例**:
```javascript
$('#').AutoSize({
PageSize: 'device-width',
Ratio: window.devicePixelRatio,
Resize: true,
ScaleFont: true
})
```
---
## 9️⃣ 弹框 - Dialog
**功能说明**:
- 创建遮罩层和弹框元素
- 支持多种进出动画效果(无、缩放、从上/下方进入)
- 支持点击遮罩关闭
- 支持确认和取消按钮回调
**使用方式**:
```javascript
$('#dialog').Dialog(config)
```
**参数说明**:
```javascript
{
mask: true, // 显示遮罩
maskColor: 'rgba(0,0,0,.85)',
maskOut: true, // 点击遮罩退出
Speed: 180, // 过渡速度(毫秒)
Curve: 'ease-out', // 过渡曲线
Direction: 'zoom', // 进出方式:none/zoom/top/bottom
In: () => console.log('进入'),
Out: () => console.log('退出'),
Confirm: {
btn: '.confirm-btn',
callback: ({ param, close }) => {
console.log('确认', param)
close()
}
},
Cancel: {
btn: '.cancel-btn',
callback: ({ param, close }) => {
console.log('取消', param)
close()
}
}
}
```
**示例**:
```javascript
$('#dialog').Dialog({
mask: true,
maskOut: true,
Direction: 'zoom',
Confirm: {
btn: '.confirm-btn',
callback: ({ close }) => {
console.log('确认')
close()
}
},
Cancel: {
btn: '.cancel-btn',
callback: ({ close }) => {
console.log('取消')
close()
}
}
})
// 打开弹框
$('#dialog').open({ data: '参数' })
// 关闭弹框
$('#dialog').close()
```
**HTML 结构**:
```html
```
---
## 🔟 图片处理
### 10.1 ImgLoader - 图片预加载
**功能说明**:
- 自动解析 HTML 获取所有图片地址
- 使用 `Promise.all` 批量加载图片
- 支持 CSS 背景图加载
- 支持容器内和全局两种模式
**使用方式**:
```javascript
$('#container').ImgLoader(config)
```
**参数说明**:
```javascript
{
lazy: true, // 渐进式
loading: (progress) => { // 加载进度
console.log(progress + '%')
},
callback: () => { // 加载完成
console.log('全部加载完成')
},
error: (err) => { // 加载错误
console.error(err)
}
}
```
**示例**:
```javascript
// 容器内图片预加载
$('#container').ImgLoader({
lazy: true,
loading: (progress) => {
showLoading(`加载中 ${progress}%`)
},
callback: () => {
hideLoading()
},
error: (err) => {
alert('加载失败')
}
})
// 全局图片预加载
$().ImgLoader({
lazy: false,
loading: (progress) => console.log(progress + '%'),
callback: () => console.log('加载完成')
})
```
---
### 10.2 ImgUpload - 图片上传
**功能说明**:
- 使用 `FormData` 上传文件
- 支持图片压缩和尺寸裁切
- 支持拖拽上传
- 支持多文件上传
**使用方式**:
```javascript
$('#upload').ImgUpload(config)
```
**参数说明**:
```javascript
{
apiUrl: '/api/upload', // 接口地址
Format: '*', // 格式限制:jpg/png/gif/*
type: 'default', // 选择类型:default/camera
Max: 3, // 最大数量
Quality: 100, // 压缩比例
Clip: { // 尺寸裁切
width: null,
height: null
},
alwaysCover: false, // 总是覆盖
Events: {
overMax: () => console.log('超过限制'),
ready: () => console.log('开始上传'),
progress: (p) => console.log(p + '%'),
success: (data) => console.log('上传成功', data),
fail: () => console.log('上传失败')
},
Uid: 'user_123' // 唯一ID
}
```
**示例**:
```javascript
$('#upload').ImgUpload({
apiUrl: '/api/upload',
Max: 5,
Quality: 80,
Events: {
ready: () => showLoading(),
progress: (p) => showLoading(`上传中 ${p}%`),
success: (data) => {
hideLoading()
$('#preview').append(`
`)
},
fail: () => {
hideLoading()
alert('上传失败')
}
}
})
```
**HTML 结构**:
```html
```
---
### 10.3 ImgTransit - 图片移动缩放
**功能说明**:
- 支持图片移动、缩放、旋转操作
- 支持多点触控手势
- 支持边界限制
- 提供控制图标和边框显示
**使用方式**:
```javascript
$('#container').ImgTransit(config)
```
**参数说明**:
```javascript
{
icon: true, // 显示控制图标
iconSize: 30, // 图标大小
border: true, // 显示边框
Gesture: false, // 多点触控
padding: 10, // 内边距
scale: {
enable: true,
min: 80,
max: 150,
rate: 1
},
rotate: {
enable: true,
rate: 1
},
delete: true, // 启用删除
bounds: true, // 边界限制
outBounds: 0, // 可超出范围
callback: (data) => { // 操作回调
console.log(data.type, data.obj)
}
}
```
**示例**:
```javascript
$('#container').ImgTransit({
icon: true,
scale: { enable: true, min: 50, max: 200 },
rotate: { enable: true },
delete: true,
bounds: true,
callback: (data) => {
console.log('操作类型:', data.type)
}
})
```
**HTML 结构**:
```html
```
---
### 10.4 LazyLoad - 懒加载
**功能说明**:
- 监听滚动事件检测元素位置
- 当图片进入视口时延迟加载
- 支持自定义缺省尺寸和图标
**使用方式**:
```javascript
$('#container').LazyLoad(config)
```
**参数说明**:
```javascript
{
width: 100, // 缺省尺寸
height: 100,
icon: '/loader.svg' // 缺省图标
}
```
**示例**:
```javascript
$('#container').LazyLoad({
width: 200,
height: 150,
icon: '/loader.svg'
})
```
**HTML 结构**:
```html
```
---
## 1️⃣1️⃣ 微信 SDK - wxSDK
**功能说明**:
- 动态加载微信 JS-SDK
- 配置微信分享参数
- 支持服务端签名
**使用方式**:
```javascript
$('#').wxSDK(config)
```
**参数说明**:
```javascript
{
apiUrl: '/api/wechat/sign', // 获取签名接口
sdk: 'https://res.wx.qq.com/open/js/jweixin-1.6.0.js',
title: ['分享至朋友圈', '分享至好友'],
desc: '万事皆虚,万物皆允',
shareIcon: 'https://example.com/icon.jpg',
shareLinks: window.location.href,
debug: false,
jsApiList: ['chooseImage', 'previewImage'],
openTagList: ['wx-open-launch-app'],
callback: {
ready: () => console.log('分享就绪'),
success: () => console.log('分享成功'),
error: () => console.log('分享失败')
}
}
```
**示例**:
```javascript
$('#').wxSDK({
apiUrl: '/api/wechat/sign',
title: ['分享标题', '分享标题'],
desc: '分享描述',
shareIcon: 'https://example.com/icon.jpg',
shareLinks: window.location.href,
debug: false,
jsApiList: ['chooseImage', 'previewImage'],
callback: {
ready: () => console.log('分享就绪'),
success: () => console.log('分享成功'),
error: () => console.log('分享失败')
}
})
```
---
## 1️⃣2️⃣ OSS 上传 - ossUpload
**功能说明**:
- 使用阿里云 OSS 客户端签名上传
- 支持文件大小限制
- 支持上传进度监听
**使用方式**:
```javascript
const uploader = $('#').ossUpload(config)
uploader.start(options)
```
**参数说明**:
```javascript
{
AccessId: 'your-access-id',
AccessKey: 'your-access-key',
Endpoint: 'https://bucket.oss-cn-hangzhou.aliyuncs.com',
maxSize: 2 // MB
}
// start 参数
{
fileObj: file,
fileName: 'image',
dirName: 'images',
headers: null,
async: true,
progress: (p) => console.log(p + '%')
}
```
**示例**:
```javascript
const uploader = $('#').ossUpload({
AccessId: 'your-access-id',
AccessKey: 'your-access-key',
Endpoint: 'https://bucket.oss-cn-hangzhou.aliyuncs.com',
maxSize: 2
})
uploader.start({
fileObj: file,
fileName: 'image',
dirName: 'images',
progress: (p) => console.log(p + '%')
}).then(res => {
console.log('上传成功', res.url)
}).catch(err => {
console.error('上传失败', err)
})
```
---
## 1️⃣3️⃣ 工具方法
### 13.1 guid - 生成唯一ID
**功能说明**:
- 生成 UUID 格式的唯一标识符
- 每个实例自动分配唯一 ID
**示例**:
```javascript
$('#box').pid // 获取当前实例的GUID
// 例如: PandoraEX_3a4b-5c6d-7e8f-9a0b-1c2d3e4f5a6b
```
---
### 13.2 extend - 对象合并
**功能说明**:
- 将默认配置与用户配置合并
- 实现配置对象的扩展
**示例**:
```javascript
const config = $('#box').extend({ a: 1 }, { b: 2 })
// { a: 1, b: 2 }
```
---
### 13.3 getParams - URL参数解析
**功能说明**:
- 解析 URL 查询字符串
- 返回键值对对象
**示例**:
```javascript
const params = $('#box').getParams()
// URL: ?id=123&name=test
// 返回: { id: '123', name: 'test' }
```
---
### 13.4 Array - 数组工具
**功能说明**:
- 提供数组随机打乱、判断重复、求和等常用操作
**示例**:
```javascript
// 随机打乱
const shuffled = $('#box').Array.Random()
// 判断重复
const hasRepeat = $('#box').Array.hasRepeat()
// 数组求和
const sum = $('#box').Array.Sum()
```
---
## 1️⃣4️⃣ 全局配置
### 禁用原生重写
```javascript
window.resetAlert = false // 禁用 alert 重写
window.resetConfirm = false // 禁用 confirm 重写
```
---
## 1️⃣5️⃣ 最佳实践示例
### 15.1 完整的 CRUD 操作
```javascript
// 列表加载
function loadList() {
showLoading()
$('#').ajax({
url: '/api/users',
type: 'get',
async: true,
success: (res) => {
renderList(res.data)
hideLoading()
},
error: () => {
alert('加载失败')
hideLoading()
}
})
}
// 渲染列表
function renderList(data) {
const html = data.map(item => `
| ${item.id} |
${item.name} |
|
`).join('')
$('#list').html(html)
}
// 添加用户
function addUser() {
const formData = $('#form').serialize()
showLoading()
$('#').ajax({
url: '/api/users',
type: 'post',
data: formData,
success: () => {
alert('添加成功')
hideLoading()
loadList()
}
})
}
// 删除用户
function deleteUser(id) {
confirm({
title: '确认删除',
content: '确定要删除该用户吗?'
}).then(() => {
showLoading()
$('#').ajax({
url: `/api/users/${id}`,
type: 'delete',
success: () => {
alert('删除成功')
hideLoading()
loadList()
}
})
})
}
```
---
### 15.2 图片上传预览
```javascript
$('#upload').ImgUpload({
apiUrl: '/api/upload',
Max: 5,
Events: {
ready: () => showLoading(),
progress: (p) => showLoading(`上传中 ${p}%`),
success: (data) => {
hideLoading()
$('#preview').append(`
`)
},
fail: () => {
hideLoading()
alert('上传失败')
}
}
})
```
---
### 15.3 轮播图完整实现
```javascript
$('#slider').Switcher({
Speed: 0.8,
Effect: 'slider',
AutoSpeed: 3,
Pagination: true,
Hover: true,
Loop: true,
onChange: (index) => {
$('.dot').removeClass('active')
$('.dot').eq(index).addClass('active')
}
})
// 绑定分页点击
$('.dot').click((el, index) => {
$('#slider').direct(index)
})
```
---
### 15.4 模板渲染动态数据
```javascript
$('#user-info').Mush({
data: {
name: '张三',
age: 18,
avatar: '/avatar.jpg'
},
Init: (data) => {
console.log('用户信息加载完成', data)
},
Update: (data) => {
console.log('用户信息已更新', data)
}
})
// 更新数据
$('#user-info').setData({ name: '李四', age: 20 })
```
---
### 15.5 SPA 路由应用
```javascript
$('#app').Router({
routes: [
{ path: '/', component: '/pages/home.html' },
{ path: '/user', component: '/pages/user.html' },
{ path: '/detail', component: '/pages/detail.html' }
]
})
// 页面跳转
$('.nav-item').click((el) => {
const path = el.attr('data-path')
$('#app').to(path)
})
```
---
## 📝 注意事项
1. **浏览器兼容性**:支持现代浏览器,需要 ES6 支持
2. **依赖文件**:需要 `base64.js` 和 `icoConfig.json`
3. **Crypto 依赖**:OSS 上传需要 Crypto 工具
4. **微信 SDK**:需要服务端签名支持
5. **图片路径**:确保图标路径正确
---
## 📄 许可证
详见 LICENSE 文件
---
*文档版本:2.0.0*