# Pandora.js 完整 API 文档 ## 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; /* 字体颜色 */ } ``` --- ### 1.2 confirm - 自定义确认框 **说明**:重写原生 confirm,返回 Promise **使用方式**: ```javascript confirm(config) ``` **参数**: ```javascript { title: '标题', // 可选 content: '确认内容', // 可选 confirmText: '确认', // 可选,默认"确认" cancelText: '取消', // 可选,默认"取消" showConfirm: true, // 可选,是否显示确认按钮 showCancel: true // 可选,是否显示取消按钮 } ``` **示例**: ```javascript // 基础用法 confirm('确定要删除吗?').then(() => { console.log('确认') }).catch(() => { console.log('取消') }) // 完整配置 confirm({ title: '提示', content: '是否继续操作?', confirmText: '继续', cancelText: '放弃' }).then(() => { // 确认回调 }).catch(() => { // 取消回调 }) ``` --- ### 1.3 showLoading / hideLoading - 加载遮罩 **使用方式**: ```javascript showLoading(progress = null) // progress: 显示进度文字 hideLoading() ``` **示例**: ```javascript showLoading() setTimeout(() => hideLoading(), 2000) showLoading('加载中 50%...') setTimeout(() => hideLoading(), 2000) ``` --- ## 2. DOM 操作 ### 2.1 选择器方法 **说明**:支持 CSS 选择器语法,类似 jQuery **示例**: ```javascript const $ = Pandora // 基础选择 $('.class') // 类选择器 $('#id') // ID 选择器 $('div') // 标签选择器 $('.class .child') // 层级选择器 // 链式操作 $('#box') .find('.item') .eq(0) .addClass('active') ``` --- ### 2.2 元素遍历与筛选 ```javascript // eq(index) - 选择指定下标元素 $('.item').eq(0).text() // child(name) - 选择子级元素 $('#box').child('.item') // find(name) - 查找所有子级元素 $('#box').find('.item') // parent() - 选择父级 $('.item').parent() // siblings(name) - 选择同级元素 $('.item').siblings() // 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') // css({key: value}) - 设置样式 $('#box').css({ 'color': 'red', 'font-size': '14px' }) // 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') // height(height) - 获取/设置高度 const h = $('#box').height() $('#box').height('100px') ``` --- ### 2.4 内容操作 ```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 属性与类名操作 ```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') // removeClass(name) - 移除类名 $('#box').removeClass('active') // hasClass(name) - 检查类名 if ($('#box').hasClass('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 请求 **使用方式**: ```javascript $('#').ajax({ 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 封装 **使用方式**: ```javascript $('#').fetch({ 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 - 表单序列化 **说明**:将表单数据转换为对象 **示例**: ```javascript const formData = $('#form').serialize() // { username: 'admin', password: '123456' } ``` --- ### 4.2 setForm - 设置表单值 **使用方式**: ```javascript $('#form').setForm({ username: 'admin', password: '123456', gender: 'male' // radio hobbies: ['reading'] // checkbox }) ``` --- ## 5. 模板渲染 ### 5.1 Mush - Mustache 模板渲染 **使用方式**: ```javascript $('#container').Mush({ data: { // 渲染数据 name: '张三', age: 18 }, Init: (data) => { // 首次渲染完成 console.log('初始渲染', data) }, Update: (data) => { // 每次更新完成 console.log('数据更新', data) } }) ``` **HTML 模板**: ```html

姓名:{{name}}

年龄:{{age}}

``` **动态更新**: ```javascript // 修改数据会自动更新视图 $('#container').setData({ name: '李四' }) ``` --- ### 5.2 全局数据管理 ```javascript // setData - 设置全局数据 $('#box').setData({ userInfo: { name: '张三' }, config: { theme: 'dark' } }) // getData - 获取全局数据 const userInfo = $('#box').getData('userInfo') ``` --- ### 5.3 template - 模板加载 **使用方式**: ```javascript $('#container').template('home', document.body) ``` **HTML 模板定义**: ```html ``` --- ## 6. 路由 - Router **使用方式**: ```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') ``` --- ## 7. 轮播图 - Switcher **使用方式**: ```javascript $('#slider').Switcher({ 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 // 窗口变化自动调整 }) // 控制方法 $('#slider').prev() // 上一页 $('#slider').next() // 下一页 $('#slider').direct(2) // 跳转到指定页 $('#slider').disable() // 禁用 $('#slider').enable() // 启用 ``` **HTML 结构**: ```html
...
...
...
``` --- ## 8. 响应式 - AutoSize **使用方式**: ```javascript $('#').AutoSize({ PageSize: 'device-width', // 固定尺寸 InitScale: 1, // 初始缩放 MinScale: 1, // 最小缩放 MaxScale: 1, // 最大缩放 Ratio: window.devicePixelRatio, // DPI缩放 Resize: true, // 窗口变化重新计算 ScaleFont: true // 缩放字体大小 }) ``` --- ## 9. 弹框 - Dialog **使用方式**: ```javascript $('#dialog').Dialog({ 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() } } }) // 打开弹框 $('#dialog').open({ data: '参数' }) // 关闭弹框 $('#dialog').close() ``` **HTML 结构**: ```html ``` --- ## 10. 图片处理 ### 10.1 ImgLoader - 图片预加载 **使用方式**: ```javascript $('#container').ImgLoader({ lazy: true, // 渐进式 loading: (progress) => { // 加载进度 console.log(progress + '%') }, callback: () => { // 加载完成 console.log('全部加载完成') }, error: (err) => { // 加载错误 console.error(err) } }) ``` --- ### 10.2 ImgUpload - 图片上传 **使用方式**: ```javascript $('#upload').ImgUpload({ 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 }) ``` **HTML 结构**: ```html
``` --- ### 10.3 ImgTransit - 图片移动缩放 **使用方式**: ```javascript $('#container').ImgTransit({ 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) } }) ``` **HTML 结构**: ```html
image1 image2
``` --- ### 10.4 LazyLoad - 懒加载 **使用方式**: ```javascript $('#container').LazyLoad({ width: 100, // 缺省尺寸 height: 100, icon: '/loader.svg' // 缺省图标 }) ``` **HTML 结构**: ```html
``` --- ## 11. 微信 SDK - wxSDK **使用方式**: ```javascript $('#').wxSDK({ 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('分享失败') } }) ``` --- ## 12. OSS 上传 - ossUpload **使用方式**: ```javascript const uploader = $('#').ossUpload({ AccessId: 'your-access-id', AccessKey: 'your-access-key', Endpoint: 'https://bucket.oss-cn-hangzhou.aliyuncs.com', maxSize: 2 // MB }) // 上传文件 uploader.start({ fileObj: file, fileName: 'image', dirName: 'images', headers: null, async: true, progress: (p) => console.log(p + '%') }).then(res => { console.log('上传成功', res.url) }).catch(err => { console.error('上传失败', err) }) ``` --- ## 13. 工具方法 ### 13.1 guid - 生成唯一ID ```javascript $('#box').pid // 获取当前实例的GUID ``` --- ### 13.2 extend - 对象合并 ```javascript const config = $('#box').extend({ a: 1 }, { b: 2 }) // { a: 1, b: 2 } ``` --- ### 13.3 getParams - 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() ``` --- ## 14. 全局配置 ### 禁用原生重写 ```javascript window.resetAlert = false // 禁用 alert 重写 window.resetConfirm = false // 禁用 confirm 重写 ``` --- ## 15. 最佳实践示例 ### 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. **图片路径**:确保图标路径正确 --- *文档版本:1.0.0*