Files
Pandora/README.md

1539 lines
30 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Pandora.js 完整 API 文档
## 📖 简介
Pandora.js 是一款专为新手优化的 JavaScript 插件提供前端开发中常用的功能模块API 设计简洁,支持链式调用。
### 核心特性
- **轻量级**:零依赖,开箱即用
- **链式调用**:大多数方法支持链式写法
- **原生 JS**:基于原生 JavaScript 实现,兼容性好
- **功能丰富**:涵盖 DOM 操作、网络请求、组件交互等
### 快速开始
```html
<!-- 引入 Pandora.js -->
<script src="Pandora.js"></script>
<!-- 依赖文件 -->
<script src="src/base64.js"></script>
```
---
## 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('<div>新内容</div>')
// val(value) - 获取/设置表单值
const v = $('#input').val()
$('#input').val('新值')
$('#select').val('option1')
// append(target) - 追加内容
$('#box').append('<div>追加内容</div>')
$('#box').append(domElement)
// prepend(target) - 前置内容
$('#box').prepend('<div>前置内容</div>')
// 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 模板
<div id="container">
<p>姓名{{name}}</p>
<p>年龄{{age}}</p>
</div>
// 初始化渲染
$('#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 - 模板加载
**功能说明**
-`<template>` 标签加载 HTML 模板
- 支持从远程 URL 加载模板
- 自动加载关联的 CSS 和 JS 文件
- 简化页面组件化管理
**使用方式**
```javascript
$('#container').template(route, container)
```
**示例**
```javascript
// HTML 模板定义
<template route="home" src="/templates/home.html"></template>
// 加载模板
$('#container').template('home', document.body)
```
---
## 6⃣ 路由 - Router
**功能说明**
- 基于 History API 实现单页应用路由
- 支持路由参数传递
- 自动处理 `<a>` 标签点击事件
- 支持路由回调函数
**使用方式**
```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
<div id="slider">
<div class="item" data-title="1">...</div>
<div class="item" data-title="2">...</div>
<div class="item" data-title="3">...</div>
</div>
```
---
## 8⃣ 响应式 - AutoSize
**功能说明**
- 自动计算并设置 `<meta name="viewport">`
- 根据屏幕尺寸设置根元素字体大小
- 支持窗口变化时重新计算
**使用方式**
```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
<div id="dialog" style="display:none">
<div class="content">弹框内容</div>
<button class="confirm-btn">确认</button>
<button class="cancel-btn">取消</button>
</div>
```
---
## 🔟 图片处理
### 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(`<img src="${data.src}">`)
},
fail: () => {
hideLoading()
alert('上传失败')
}
}
})
```
**HTML 结构**
```html
<div id="upload">
<button>选择图片</button>
</div>
```
---
### 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
<div id="container">
<img src="1.jpg" alt="image1">
<img src="2.jpg" alt="image2">
</div>
```
---
### 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
<div id="container">
<img data-src="1.jpg" data-width="200" data-height="150">
<img data-src="2.jpg" data-width="200" data-height="150">
</div>
```
---
## 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 => `
<tr>
<td>${item.id}</td>
<td>${item.name}</td>
<td>
<button onclick="editUser(${item.id})">编辑</button>
<button onclick="deleteUser(${item.id})">删除</button>
</td>
</tr>
`).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(`<img src="${data.src}">`)
},
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*