saven
Version:
2,069 lines (1,984 loc) • 318 kB
TypeScript
import { buffer } from "rxjs/operators";
export = Saven;
export as namespace Saven;
declare namespace Saven {
interface PageNotFoundObject {
/**
* 不存在页面的路径
*/
path: string,
/**
* 打开不存在页面的 query
*/
query: object,
/**
* 是否本次启动的首个页面(例如从分享等入口进来,首个页面是开发者配置的分享页面)
*/
isEntryPage: boolean
}
// Components
interface ComponentLifecycle<P, S> {
componentWillMount?(): void;
componentDidMount?(): void;
componentWillReceiveProps?(nextProps: Readonly<P>, nextContext: any): void;
shouldComponentUpdate?(nextProps: Readonly<P>, nextState: Readonly<S>, nextContext: any): boolean;
componentWillUpdate?(nextProps: Readonly<P>, nextState: Readonly<S>, nextContext: any): void;
componentDidUpdate?(prevProps: Readonly<P>, prevState: Readonly<S>, prevContext: any): void;
componentWillUnmount?(): void;
componentDidShow?(): void;
componentDidHide?(): void;
componentDidCatchError?(err: string): void;
componentDidNotFound?(obj: PageNotFoundObject): void;
}
interface Component<P = {}, S = {}> extends ComponentLifecycle<P, S> {
$scope?: any
}
interface PageConfig {
/**
* 导航栏背景颜色,HexColor
* default: #000000
*/
navigationBarBackgroundColor?: string,
/**
* 导航栏标题颜色,仅支持 black/white
* default: 'white'
*/
navigationBarTextStyle?: 'white' | 'black',
/**
* 导航栏标题文字内容
*/
navigationBarTitleText?: string,
/**
* 导航栏样式,仅支持以下值:
* default 默认样式
* custom 自定义导航栏
*/
navigationStyle?: string,
/**
* 窗口的背景色, HexColor
* default: #ffffff
*/
backgroundColor?: string,
/**
* 下拉背景字体、loading 图的样式,仅支持 dark/light
* default: 'dark'
*/
backgroundTextStyle?: 'dark' | 'light',
/**
* 是否开启下拉刷新
* default: false
*/
enablePullDownRefresh?: boolean,
/**
* 页面上拉触底事件触发时距页面底部距离,单位为px
* default: 50
*/
onReachBottomDistance?: number
/**
* 设置为 true 则页面整体不能上下滚动;只在页面配置中有效,无法在 app.json 中设置该项
* default: false
*/
disableScroll?: boolean
}
interface TarbarList {
/**
* 页面路径,必须在 pages 中先定义
*/
pagePath: string,
/**
* tab 上按钮文字
*/
text: string,
/**
* 图片路径,icon 大小限制为40kb,建议尺寸为 81px * 81px,当 postion 为 top 时,此参数无效,不支持网络图片
*/
iconPath?: string,
/**
* 选中时的图片路径,icon 大小限制为40kb,建议尺寸为 81px * 81px ,当 postion 为 top 时,此参数无效
*/
selectedIconPath?: string,
}
interface TabBar {
/**
* tab 上的文字默认颜色
*/
color?: string,
/**
* tab 上的文字选中时的颜色
*/
selectedColor?: string,
/**
* tab 的背景色
*/
backgroundColor?: string,
/**
* tabbar上边框的颜色, 仅支持 black/white
* default: black
*/
borderStyle?: 'black' | 'white',
/**
* tabar 的位置,可选值 bottom、top
* default: 'bottom'
*/
position?: 'bottom' | 'top',
list: TarbarList[]
}
interface NetworkTimeout {
/**
* wx.request 的超时时间,单位毫秒。
* @default 60000
*/
request?: number
/**
* wx.connectSocket 的超时时间,单位毫秒。
* @default 60000
*/
connectSocket?: number
/**
* wx.uploadFile 的超时时间,单位毫秒。
* @default 60000
*/
uploadFile?: number
/**
* wx.downloadFile 的超时时间,单位毫秒。
* @default 60000
*/
downloadFile?: number
}
interface SubPackage {
/**
* 分包根路径
* - 注意:不能放在主包pages目录下
*/
root: string,
/**
* 分包路径下的所有页面配置
*/
pages: string[]
}
interface Plugins {
[key: string]: {
version: string
provider: string
}
}
interface PreloadRule {
[key: string]: {
/**
*进入页面后预下载分包的 root 或 name。__APP__ 表示主包。
*/
packages: string[]
/**
* 在指定网络下预下载,可选值为:
* all: 不限网络
* wifi: 仅wifi下预下载
* @default wifi
*/
network?: 'all' | 'wifi'
}
}
interface AppConfig {
/**
* 接受一个数组,每一项都是字符串,来指定小程序由哪些页面组成,数组的第一项代表小程序的初始页面
*/
pages?: string[],
tabBar?: TabBar,
/**
* 各类网络请求的超时时间,单位均为毫秒。
*/
networkTimeout?: NetworkTimeout
/**
* 是否开启 debug 模式,默认关闭
* @default false
*/
debug?: boolean
/**
* 启用插件功能页时,插件所有者小程序需要设置其 functionalPages 为 true。
* @see https://developers.weixin.qq.com/miniprogram/dev/framework/plugin/functional-pages.html
* @default false
* @since 2.1.0
*/
functionalPages?: boolean
/**
* 分包加载配置
* 示例:
* [
* {
* root: 'packages/module',
* pages: [
* 'pages/page/index'
* ]
* }
* ]
* @since 1.7.3
*/
subPackages?: SubPackage[]
/**
* Worker 代码放置的目录
* 使用 Worker 处理多线程任务时,设置 Worker 代码放置的目录
* @since 1.9.9
*/
workers?: string
/**
* 申明需要后台运行的能力,类型为数组。目前支持以下项目:
* @since 微信客户端 6.7.2 及以上版本支持
*/
requiredBackgroundModes?: ["audio"]
/**
* 使用到的插件
* @since 1.9.6
*/
plugins?: Plugins
/**
* 声明分包预下载的规则。
* preloadRule 中,key 是页面路径,value 是进入此页面的预下载配置
* 注意: 分包预下载目前只支持通过配置方式使用,暂不支持通过调用API完成。
* vConsole 里有preloadSubpackages开头的日志信息,可以用来验证预下载的情况。
* @since 2.3.0
*/
preloadRule?: PreloadRule
/**
* iPad 小程序是否支持屏幕旋转
* @default false
* @since 2.3.0
*/
resizable?: boolean
}
interface Config extends PageConfig, AppConfig {
usingComponents?: {
[key: string]: string
},
window?: PageConfig
}
interface ComponentOptions {
addGlobalClass?: boolean
}
class Component<P, S> {
constructor(props?: P, context?: any);
config?: Config;
options?: ComponentOptions;
$router: {
params: any
}
setState<K extends keyof S>(
state: ((prevState: Readonly<S>, props: P) => (Pick<S, K> | S)) | (Pick<S, K> | S),
callback?: () => any
): void;
forceUpdate(callBack?: () => any): void;
render(): any;
props: Readonly<P> & Readonly<{ children?: any }>;
state: Readonly<S>;
context: any;
refs: {
[key: string]: any
};
}
class PureComponent<P = {}, S = {}> extends Component<P, S> { }
// Events
class Events {
/**
* 监听一个事件,接受参数
*/
on(eventName: string | symbol, listener: (...args: any[]) => void): this;
/**
* 添加一个事件监听,并在事件触发完成之后移除Callbacks链
*/
once(eventName: string | symbol, listener: (...args: any[]) => void): this;
/**
* 取消监听一个事件
*/
off(eventName: string | symbol, listener?: (...args: any[]) => void): this;
/**
* 触发一个事件,传参
*/
trigger(eventName: string | symbol, ...args: any[]): boolean;
}
// eventCenter
namespace eventCenter {
function on(eventName: string | symbol, listener: (...args: any[]) => void): void;
function once(eventName: string | symbol, listener: (...args: any[]) => void): void;
function off(eventName: string | symbol, listener?: (...args: any[]) => void): void;
function trigger(eventName: string | symbol, ...args: any[]): boolean;
}
// ENV_TYPE
enum ENV_TYPE {
WEAPP = 'WEAPP',
WEB = 'WEB',
RN = 'RN'
}
function getEnv(): ENV_TYPE.WEAPP | ENV_TYPE.WEB | ENV_TYPE.RN;
function render(component: Component | JSX.Element, element: Element | null)
function pxTransform(size: number): string
/**
* 小程序引用插件 JS 接口
*/
function requirePlugin(pluginName: string): any
/**
*
* 微信端能力
* original code from: https://github.com/qiu8310/minapp/blob/master/packages/minapp-wx/typing/wx.d.ts
* Lincenced under MIT license: https://github.com/qiu8310/minapp/issues/69
* thanks for the great work by @qiu8310 👍👍👍
*
*/
namespace request {
type Promised<T extends any | string | ArrayBuffer = any> = {
/**
* 开发者服务器返回的数据
*
* **data 数据说明:**
*
* 最终发送给服务器的数据是 String 类型,如果传入的 data 不是 String 类型,会被转换成 String 。转换规则如下:
*
* * 对于 `GET` 方法的数据,会将数据转换成 query string(encodeURIComponent(k)=encodeURIComponent(v)&encodeURIComponent(k)=encodeURIComponent(v)...)
* * 对于 `POST` 方法且 `header['content-type']` 为 `application/json` 的数据,会对数据进行 JSON 序列化
* * 对于 `POST` 方法且 `header['content-type']` 为 `application/x-www-form-urlencoded` 的数据,会将数据转换成 query string (encodeURIComponent(k)=encodeURIComponent(v)&encodeURIComponent(k)=encodeURIComponent(v)...)
*/
data: T
/**
* 开发者服务器返回的 HTTP 状态码
*/
statusCode: number
/**
* 开发者服务器返回的 HTTP Response Header
*
* @since 1.2.0
*/
header: any
}
type Param<P extends any | string | ArrayBuffer = any> = {
/**
* 开发者服务器接口地址
*/
url: string
/**
* 请求的参数
*/
data?: P
/**
* 设置请求的 header,header 中不能设置 Referer。
*/
header?: any
/**
* (需大写)有效值:OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
*
* @default GET
*/
method?: 'OPTIONS' | 'GET' | 'HEAD' | 'POST' | 'PUT' | 'DELETE' | 'TRACE' | 'CONNECT'
/**
* 如果设为json,会尝试对返回的数据做一次 JSON.parse
*
* @default json
*/
dataType?: string
/**
* 设置响应的数据类型。合法值:text、arraybuffer
*
* @default text
* @since 1.7.0
*/
responseType?: string,
/**
* 设置H5端是否使用jsonp方式获取数据
*
* @default false
*/
jsonp?: boolean,
/**
* 设置H5端 jsonp 请求 url 是否需要被缓存
*
* @default false
*/
jsonpCache?: boolean,
/**
* 设置H5端是否允许跨域请求。有效值:no-cors, cors, same-origin
*
* @default same-origin
*/
mode?: 'no-cors' | 'cors' | 'same-origin',
/**
* 设置H5端是否携带 Cookie。有效值:include, same-origin, omit
*
* @default omit
*/
credentials?: 'include' | 'same-origin' | 'omit',
/**
* 设置H5端缓存模式。有效值:default, no-cache, reload, force-cache, only-if-cached
*
* @default default
*/
cache?: 'default' | 'no-cache' | 'reload' | 'force-cache' | 'only-if-cached'
}
}
/**
* 发起网络请求。**使用前请先阅读[说明](https://developers.weixin.qq.com/miniprogram/dev/api/api-network.html)**。
*
* **返回值:**
*
* @since 1.4.0
*
* 返回一个 `requestTask` 对象,通过 `requestTask`,可中断请求任务。
*
* **Bug & Tip:**
*
* 1. `tip`: content-type 默认为 'application/json';
* 2. `tip`: url 中不能有端口;
* 3. `bug`: 开发者工具 `0.10.102800` 版本,`header` 的 `content-type` 设置异常;
*
* **示例代码:**
*
* ```javascript
* Saven.request({
* url: 'test.php', //仅为示例,并非真实的接口地址
* data: {
* x: '' ,
* y: ''
* },
* header: {
* 'content-type': 'application/json' // 默认值
* },
* success: function(res) {
* console.log(res.data)
* }
* })
* ```
*
* **示例代码:**
*
* ```javascript
* const requestTask = Saven.request({
* url: 'test.php', //仅为示例,并非真实的接口地址
* data: {
* x: '' ,
* y: ''
* },
* header: {
* 'content-type': 'application/json'
* },
* success: function(res) {
* console.log(res.data)
* }
* })
*
* requestTask.abort() // 取消请求任务
* ```
* @see https://developers.weixin.qq.com/miniprogram/dev/api/network-request.html#wxrequestobject
*/
function request<T = any, U = any>(OBJECT: request.Param<U>): Promise<request.Promised<T>>
type arrayBuffer = Uint8Array |
Int8Array |
Uint8Array |
Uint8ClampedArray |
Int16Array |
Uint16Array |
Int32Array |
Uint32Array |
Float32Array |
Float64Array |
ArrayBuffer
/**
* 将 ArrayBuffer 数据转成 Base64 字符串
*/
function arrayBufferToBase64(buffer: arrayBuffer): string
/**
* 将 Base64 字符串转成 ArrayBuffer 数据
*/
function base64ToArrayBuffer(base64: string): arrayBuffer
namespace uploadFile {
type Promised = {
/**
* 开发者服务器返回的数据
*/
data: string
/**
* 开发者服务器返回的 HTTP 状态码
*/
statusCode: number
}
type Param = {
/**
* 开发者服务器 url
*/
url: string
/**
* 要上传文件资源的路径
*/
filePath: string
/**
* 文件对应的 key , 开发者在服务器端通过这个 key 可以获取到文件二进制内容
*/
name: string
/**
* HTTP 请求 Header, header 中不能设置 Referer
*/
header?: any
/**
* HTTP 请求中其他额外的 form data
*/
formData?: any
}
}
/**
* 将本地资源上传到开发者服务器,客户端发起一个 HTTPS POST 请求,其中 `content-type` 为 `multipart/form-data` 。**使用前请先阅读[说明](https://developers.weixin.qq.com/miniprogram/dev/api/api-network.html)**。
*
* 如页面通过 [Saven.chooseImage](https://developers.weixin.qq.com/miniprogram/dev/api/media-picture.html#wxchooseimageobject) 等接口获取到一个本地资源的临时文件路径后,可通过此接口将本地资源上传到指定服务器。
*
* **返回值:**
*
* @since 1.4.0
*
* 返回一个 `uploadTask` 对象,通过 `uploadTask`,可监听上传进度变化事件,以及取消上传任务。
*
* **示例代码:**
*
* ```javascript
* Saven.chooseImage({
* success: function(res) {
* var tempFilePaths = res.tempFilePaths
* Saven.uploadFile({
* url: 'https://example.weixin.qq.com/upload', //仅为示例,非真实的接口地址
* filePath: tempFilePaths[0],
* name: 'file',
* formData:{
* 'user': 'test'
* },
* success: function(res){
* var data = res.data
* //do something
* }
* })
* }
* })
* ```
*
* **示例代码:**
*
* ```javascript
* const uploadTask = Saven.uploadFile({
* url: 'http://example.weixin.qq.com/upload', //仅为示例,非真实的接口地址
* filePath: tempFilePaths[0],
* name: 'file',
* formData:{
* 'user': 'test'
* },
* success: function(res){
* var data = res.data
* //do something
* }
* })
*
* uploadTask.onProgressUpdate((res) => {
* console.log('上传进度', res.progress)
* console.log('已经上传的数据长度', res.totalBytesSent)
* console.log('预期需要上传的数据总长度', res.totalBytesExpectedToSend)
* })
*
* uploadTask.abort() // 取消上传任务
* ```
* @see https://developers.weixin.qq.com/miniprogram/dev/api/network-file.html#wxuploadfileobject
*/
function uploadFile(OBJECT: uploadFile.Param): Promise<uploadFile.Promised>
namespace downloadFile {
type Promised = {
/**
* 临时文件路径,下载后的文件会存储到一个临时文件
*/
tempFilePath: string
/**
* 开发者服务器返回的 HTTP 状态码
*/
statusCode: number
}
type Param = {
/**
* 下载资源的 url
*/
url: string
/**
* HTTP 请求 Header,header 中不能设置 Referer
*/
header?: any
}
}
/**
* 下载文件资源到本地,客户端直接发起一个 HTTP GET 请求,返回文件的本地临时路径。**使用前请先阅读[说明](https://developers.weixin.qq.com/miniprogram/dev/api/api-network.html)**。
*
* **返回值:**
*
* @since 1.4.0
*
* 返回一个 `downloadTask` 对象,通过 `downloadTask`,可监听下载进度变化事件,以及取消下载任务。
*
* **Bug & Tip:**
*
* 1. `tip`: 6.5.3 以及之前版本的 iOS 微信客户端 `header` 设置无效
*
* **示例代码:**
*
* ```javascript
* Saven.downloadFile({
* url: 'https://example.com/audio/123', //仅为示例,并非真实的资源
* success: function(res) {
* // 只要服务器有响应数据,就会把响应内容写入文件并进入 success 回调,业务需要自行判断是否下载到了想要的内容
* if (res.statusCode === 200) {
* Saven.playVoice({
* filePath: res.tempFilePath
* })
* }
* }
* })
* ```
*
* **示例代码:**
*
* ```javascript
* const downloadTask = Saven.downloadFile({
* url: 'http://example.com/audio/123', //仅为示例,并非真实的资源
* success: function(res) {
* Saven.playVoice({
* filePath: res.tempFilePath
* })
* }
* })
*
* downloadTask.onProgressUpdate((res) => {
* console.log('下载进度', res.progress)
* console.log('已经下载的数据长度', res.totalBytesWritten)
* console.log('预期需要下载的数据总长度', res.totalBytesExpectedToWrite)
* })
*
* downloadTask.abort() // 取消下载任务
* ```
* @see https://developers.weixin.qq.com/miniprogram/dev/api/network-file.html#wxdownloadfileobject
*/
function downloadFile(OBJECT: downloadFile.Param): Promise<downloadFile.Promised>
namespace connectSocket {
type Promised = {
/**
* 返回一个SocketTask
*/
socketTask: SocketTask
}
type Param = {
/**
* 开发者服务器接口地址,必须是 wss 协议,且域名必须是后台配置的合法域名
*/
url: string
/**
* HTTP Header , header 中不能设置 Referer
*/
header?: any
/**
* 默认是GET,有效值:OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
*/
method?: 'OPTIONS' | 'GET' | 'HEAD' | 'POST' | 'PUT' | 'DELETE' | 'TRACE' | 'CONNECT'
/**
* 子协议数组
*
* @since 1.4.0
*/
protocols?: string[]
}
}
/**
* 创建一个 [WebSocket](https://developer.mozilla.org/zh-CN/docs/Web/API/WebSocket) 连接。**使用前请先阅读[说明](https://developers.weixin.qq.com/miniprogram/dev/api/api-network.html)**。
*
* **基础库 1.7.0 之前,一个微信小程序同时只能有一个 WebSocket 连接,如果当前已存在一个 WebSocket 连接,会自动关闭该连接,并重新创建一个 WebSocket 连接。基础库版本 1.7.0 及以后,支持存在多个 WebSokcet 连接,每次成功调用 Saven.connectSocket 会返回一个新的 [SocketTask](https://developers.weixin.qq.com/miniprogram/dev/api/socket-task.html)。**
*
* **示例代码:**
*
* ```javascript
* Saven.connectSocket({
* url: 'wss://example.qq.com',
* data:{
* x: '',
* y: ''
* },
* header:{
* 'content-type': 'application/json'
* },
* protocols: ['protocol1'],
* method:"GET"
* })
* ```
* @see https://developers.weixin.qq.com/miniprogram/dev/api/network-socket.html#wxconnectsocketobject
*/
function connectSocket(OBJECT: connectSocket.Param): Promise<connectSocket.Promised>
namespace onSocketOpen {
type Param = (res: ParamParam) => any
type ParamParam = {
/**
* 连接成功的 HTTP 响应 Header
*
* @since 2.0.0
*/
header?: any
}
}
/**
* 监听WebSocket连接打开事件。
*
* **示例代码:**
*
* ```javascript
* Saven.connectSocket({
* url: 'test.php'
* })
* Saven.onSocketOpen(function(res) {
* console.log('WebSocket连接已打开!')
* })
* ```
* @see https://developers.weixin.qq.com/miniprogram/dev/api/network-socket.html#wxonsocketopencallback
*/
function onSocketOpen(callback?: onSocketOpen.Param): void
/**
* 监听WebSocket错误。
*
* **示例代码:**
*
* ```javascript
* Saven.connectSocket({
* url: 'test.php'
* })
* Saven.onSocketOpen(function(res){
* console.log('WebSocket连接已打开!')
* })
* Saven.onSocketError(function(res){
* console.log('WebSocket连接打开失败,请检查!')
* })
* ```
* @see https://developers.weixin.qq.com/miniprogram/dev/api/network-socket.html#wxonsocketerrorcallback
*/
function onSocketError(CALLBACK: any): void
namespace sendSocketMessage {
type Param = {
/**
* 需要发送的内容
*/
data: string | ArrayBuffer
}
}
/**
* 通过 WebSocket 连接发送数据,需要先 [Saven.connectSocket](https://developers.weixin.qq.com/miniprogram/dev/api/network-socket.html#wxconnectsocketobject),并在 [Saven.onSocketOpen](https://developers.weixin.qq.com/miniprogram/dev/api/network-socket.html#wxonsocketopencallback) 回调之后才能发送。
*
* **示例代码:**
*
* ```javascript
* var socketOpen = false
* var socketMsgQueue = []
* Saven.connectSocket({
* url: 'test.php'
* })
*
* Saven.onSocketOpen(function(res) {
* socketOpen = true
* for (var i = 0; i < socketMsgQueue.length; i++){
* sendSocketMessage(socketMsgQueue[i])
* }
* socketMsgQueue = []
* })
*
* function sendSocketMessage(msg) {
* if (socketOpen) {
* Saven.sendSocketMessage({
* data:msg
* })
* } else {
* socketMsgQueue.push(msg)
* }
* }
* ```
* @see https://developers.weixin.qq.com/miniprogram/dev/api/network-socket.html#wxsendsocketmessageobject
*/
function sendSocketMessage(OBJECT: sendSocketMessage.Param): Promise<any>
namespace onSocketMessage {
type Param<T = any> = (res: ParamParam<T>) => any
type ParamParam<T extends any | string | ArrayBuffer = any> = {
/**
* 服务器返回的消息
*/
data: T
}
}
/**
* 监听WebSocket接受到服务器的消息事件。
*
* **示例代码:**
*
* ```javascript
* Saven.connectSocket({
* url: 'test.php'
* })
*
* Saven.onSocketMessage(function(res) {
* console.log('收到服务器内容:' + res.data)
* })
* ```
* @see https://developers.weixin.qq.com/miniprogram/dev/api/network-socket.html#wxonsocketmessagecallback
*/
function onSocketMessage<T = any>(CALLBACK?: onSocketMessage.Param<T>): void
namespace closeSocket {
type Param = {
/**
* 一个数字值表示关闭连接的状态号,表示连接被关闭的原因。如果这个参数没有被指定,默认的取值是1000 (表示正常连接关闭)
*
* @since 1.4.0
*/
code?: number
/**
* 一个可读的字符串,表示连接被关闭的原因。这个字符串必须是不长于123字节的UTF-8 文本(不是字符)
*
* @since 1.4.0
*/
reason?: string
}
}
/**
* 关闭 WebSocket 连接。
* @see https://developers.weixin.qq.com/miniprogram/dev/api/network-socket.html#wxclosesocketobject
*/
function closeSocket(OBJECT?: closeSocket.Param): Promise<any>
/**
* 监听WebSocket关闭。
*
* **返回值:**
*
* @since 1.7.0
*
* 返回一个 [SocketTask](https://developers.weixin.qq.com/miniprogram/dev/api/socket-task.html)。
*
* **Bug & Tip:**
*
* 1. `tip`: 基础库 1.7.0 开始,支持同时存在 2 条 WebSocket 连接
*
* **示例:**
*
* ```javascript
* Saven.connectSocket({
* url: 'test.php'
* })
*
* //注意这里有时序问题,
* //如果 Saven.connectSocket 还没回调 Saven.onSocketOpen,而先调用 Saven.closeSocket,那么就做不到关闭 WebSocket 的目的。
* //必须在 WebSocket 打开期间调用 Saven.closeSocket 才能关闭。
* Saven.onSocketOpen(function() {
* Saven.closeSocket()
* })
*
* Saven.onSocketClose(function(res) {
* console.log('WebSocket 已关闭!')
* })
* ```
* @see https://developers.weixin.qq.com/miniprogram/dev/api/network-socket.html#wxonsocketclosecallback
*/
function onSocketClose(CALLBACK?: (res: any) => any): void
namespace SocketTask {
namespace send {
type Param = {
/**
* 需要发送的内容
*/
data: string | ArrayBuffer
/**
* 接口调用成功的回调函数
*/
success?: ParamPropSuccess
/**
* 接口调用失败的回调函数
*/
fail?: ParamPropFail
/**
* 接口调用结束的回调函数(调用成功、失败都会执行)
*/
complete?: ParamPropComplete
}
/**
* 接口调用成功的回调函数
*/
type ParamPropSuccess = (res: any) => any
/**
* 接口调用失败的回调函数
*/
type ParamPropFail = (err: any) => any
/**
* 接口调用结束的回调函数(调用成功、失败都会执行)
*/
type ParamPropComplete = () => any
}
namespace close {
type Param = {
/**
* 一个数字值表示关闭连接的状态号,表示连接被关闭的原因。如果这个参数没有被指定,默认的取值是1000 (表示正常连接关闭)
*/
code?: number
/**
* 一个可读的字符串,表示连接被关闭的原因。这个字符串必须是不长于123字节的UTF-8 文本(不是字符)
*/
reason?: string
/**
* 接口调用成功的回调函数
*/
success?: ParamPropSuccess
/**
* 接口调用失败的回调函数
*/
fail?: ParamPropFail
/**
* 接口调用结束的回调函数(调用成功、失败都会执行)
*/
complete?: ParamPropComplete
}
/**
* 接口调用成功的回调函数
*/
type ParamPropSuccess = (res: any) => any
/**
* 接口调用失败的回调函数
*/
type ParamPropFail = (err: any) => any
/**
* 接口调用结束的回调函数(调用成功、失败都会执行)
*/
type ParamPropComplete = () => any
}
namespace onError {
type Param = (res: ParamParam) => any
type ParamParam = {
/**
* 错误信息
*/
errMsg: string
}
}
namespace onMessage {
type Param<T = any> = (res: ParamParam<T>) => any
type ParamParam<T extends any | string | ArrayBuffer = any> = {
/**
* 服务器返回的消息
*/
data: T
}
}
}
/**
* @since 1.7.0
*
* WebSocket 任务,可通过 [Saven.connectSocket()](https://developers.weixin.qq.com/miniprogram/dev/api/network-socket.html) 接口创建返回。
*/
class SocketTask {
/**
* websocket 当前的连接状态。
*/
readonly readyState: boolean;
/**
* websocket 状态值:连接中。
*/
readonly CONNECTING: boolean;
/**
* websocket 状态值:已连接。
*/
readonly OPEN: boolean;
/**
* websocket 状态值:关闭中。
*/
readonly CLOSING: boolean;
/**
* websocket 状态值:已关闭。
*/
readonly CLOSED: boolean;
/**
* 浏览器 websocket 实例。(h5 端独有)
*/
readonly ws: WebSocket;
/**
*
* **SocketTask.send(OBJECT):**
*
* 通过 WebSocket 连接发送数据。
*/
send(OBJECT: SocketTask.send.Param): void
/**
*
* **SocketTask.close(OBJECT):**
*
* 关闭 WebSocket 连接。
*/
close(OBJECT: SocketTask.close.Param): void
/**
*
* **SocketTask.onOpen(CALLBACK):**
*
* 监听 WebSocket 连接打开事件。
*/
onOpen(CALLBACK?: any): void
/**
*
* **SocketTask.onClose(CALLBACK):**
*
* 监听 WebSocket 连接关闭事件。
*/
onClose(CALLBACK?: any): void
/**
*
* **SocketTask.onError(CALLBACK):**
*
* 监听 WebSocket 错误。
*/
onError(CALLBACK?: SocketTask.onError.Param): void
/**
*
* **SocketTask.onMessage(CALLBACK):**
*
* 监听WebSocket接受到服务器的消息事件。
*/
onMessage<T = any>(CALLBACK: SocketTask.onMessage.Param<T>): void
}
namespace chooseImage {
type Promised = {
/**
* 图片的本地文件路径列表
*/
tempFilePaths: string[]
/**
* 图片的本地文件列表,每一项是一个 File 对象
*
* @since 1.2.0
*/
tempFiles: PromisedPropTempFiles
}
/**
* 图片的本地文件列表,每一项是一个 File 对象
*/
type PromisedPropTempFiles = PromisedPropTempFilesItem[]
type PromisedPropTempFilesItem = {
/**
* 本地文件路径
*/
path: string
/**
* 本地文件大小,单位:B
*/
size: number
}
type Param = {
/**
* 最多可以选择的图片张数,默认9
*/
count?: number
/**
* original 原图,compressed 压缩图,默认二者都有
*/
sizeType?: string[]
/**
* album 从相册选图,camera 使用相机,默认二者都有
*/
sourceType?: string[]
}
}
/**
* 从本地相册选择图片或使用相机拍照。
*
* **示例代码:**
*
* ```javascript
* Saven.chooseImage({
* count: 1, // 默认9
* sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
* sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
* success: function (res) {
* // 返回选定照片的本地文件路径列表,tempFilePath可以作为img标签的src属性显示图片
* var tempFilePaths = res.tempFilePaths
* }
* })
* ```
* @see https://developers.weixin.qq.com/miniprogram/dev/api/media-picture.html#wxchooseimageobject
*/
function chooseImage(OBJECT?: chooseImage.Param): Promise<chooseImage.Promised>
namespace previewImage {
type Param = {
/**
* 当前显示图片的链接,不填则默认为 urls 的第一张
*/
current?: string
/**
* 需要预览的图片链接列表
*/
urls: string[]
}
}
/**
* 预览图片。
*
* **示例代码:**
*
* ```javascript
* Saven.previewImage({
* current: '', // 当前显示图片的http链接
* urls: [] // 需要预览的图片http链接列表
* })
* ```
* @see https://developers.weixin.qq.com/miniprogram/dev/api/media-picture.html#wxpreviewimageobject
*/
function previewImage(OBJECT: previewImage.Param): Promise<any>
namespace getImageInfo {
type Promised = {
/**
* 图片宽度,单位px
*/
width: number
/**
* 图片高度,单位px
*/
height: number
/**
* 返回图片的本地路径
*/
path: string
/**
* 返回图片的方向,有效值见下表
*
* **orientation参数说明:**
*
* 枚举值 | 说明
* -------------------|-----------------
* up | 默认
* down | 180度旋转
* left | 逆时针旋转90度
* right | 顺时针旋转90度
* up-mirrored | 同up,但水平翻转
* down-mirrored | 同down,但水平翻转
* left-mirrored | 同left,但垂直翻转
* right-mirrored | 同right,但垂直翻转
*
* @since 1.9.90
*/
orientation: 'up' | 'down' | 'left' | 'right' | 'up-mirrored' | 'down-mirrored ' | 'left-mirrored' | 'right-mirrored'
/**
* 返回图片的格式
*
* @since 1.9.90
*/
type: string
}
type Param = {
/**
* 图片的路径,可以是相对路径,临时文件路径,存储文件路径,网络图片路径
*/
src: string
}
}
/**
* 获取图片信息
*
* **示例代码:**
*
* ```javascript
* Saven.getImageInfo({
* src: 'images/a.jpg',
* success: function (res) {
* console.log(res.width)
* console.log(res.height)
* }
* })
*
* Saven.chooseImage({
* success: function (res) {
* Saven.getImageInfo({
* src: res.tempFilePaths[0],
* success: function (res) {
* console.log(res.width)
* console.log(res.height)
* }
* })
* }
* })
* ```
* @see https://developers.weixin.qq.com/miniprogram/dev/api/media-picture.html#wxgetimageinfoobject
*/
function getImageInfo(OBJECT: getImageInfo.Param): Promise<getImageInfo.Promised>
namespace saveImageToPhotosAlbum {
type Promised = {
/**
* 调用结果
*/
errMsg: string
}
type Param = {
/**
* 图片文件路径,可以是临时文件路径也可以是永久文件路径,不支持网络图片路径
*/
filePath: string
}
}
/**
* @since 1.2.0
*
* 保存图片到系统相册。需要[用户授权](https://developers.weixin.qq.com/miniprogram/dev/api/authorize-index.html) scope.writePhotosAlbum
*
* **示例代码:**
*
* ```javascript
* Saven.saveImageToPhotosAlbum({
* success(res) {
* }
* })
* ```
* @see https://developers.weixin.qq.com/miniprogram/dev/api/media-picture.html#wxsaveimagetophotosalbumobject
*/
function saveImageToPhotosAlbum(OBJECT: saveImageToPhotosAlbum.Param): Promise<saveImageToPhotosAlbum.Promised>
namespace startRecord {
type Promised = {
/**
* 录音文件的临时路径
*/
tempFilePath: string
}
type Param = {}
}
/**
* **注意:1.6.0 版本开始,本接口不再维护。建议使用能力更强的 [Saven.getRecorderManager](https://developers.weixin.qq.com/miniprogram/dev/api/getRecorderManager.html) 接口**
*
* 开始录音。当主动调用`Saven.stopRecord`,或者录音超过1分钟时自动结束录音,返回录音文件的临时文件路径。当用户离开小程序时,此接口无法调用。
*
* 需要[用户授权](https://developers.weixin.qq.com/miniprogram/dev/api/authorize-index.html) scope.record
* @see https://developers.weixin.qq.com/miniprogram/dev/api/media-record.html#wxstartrecordobject
*/
function startRecord(OBJECT?: startRecord.Param): Promise<startRecord.Promised>
/**
* 主动调用停止录音。
*
* **示例代码:**
*
* ```javascript
* Saven.startRecord({
* success: function(res) {
* var tempFilePath = res.tempFilePath
* },
* fail: function(res) {
* //录音失败
* }
* })
* setTimeout(function() {
* //结束录音
* Saven.stopRecord()
* }, 10000)
* ```
* @see https://developers.weixin.qq.com/miniprogram/dev/api/media-record.html#wxstoprecord
*/
function stopRecord(): void
/**
* @since 1.6.0
*
* 获取**全局唯一**的录音管理器 `recorderManager`。
*
* **其中,采样率和码率有一定要求,具体有效值如下::**
*
* 采样率 | 编码码率
* ----------|-------------------
* 8000 | 16000 ~ 48000
* 11025 | 16000 ~ 48000
* 12000 | 24000 ~ 64000
* 16000 | 24000 ~ 96000
* 22050 | 32000 ~ 128000
* 24000 | 32000 ~ 128000
* 32000 | 48000 ~ 192000
* 44100 | 64000 ~ 320000
* 48000 | 64000 ~ 320000
*
* **示例代码:**
*
* ```javascript
* const recorderManager = Saven.getRecorderManager()
*
* recorderManager.onStart(() => {
* console.log('recorder start')
* })
* recorderManager.onPause(() => {
* console.log('recorder pause')
* })
* recorderManager.onStop((res) => {
* console.log('recorder stop', res)
* const { tempFilePath } = res
* })
* recorderManager.onFrameRecorded((res) => {
* const { frameBuffer } = res
* console.log('frameBuffer.byteLength', frameBuffer.byteLength)
* })
*
* const options = {
* duration: 10000,
* sampleRate: 44100,
* numberOfChannels: 1,
* encodeBitRate: 192000,
* format: 'aac',
* frameSize: 50
* }
*
* recorderManager.start(options)
* ```
* @see https://developers.weixin.qq.com/miniprogram/dev/api/getRecorderManager.html#wxgetrecordermanager
*/
function getRecorderManager(): RecorderManager
namespace RecorderManager {
namespace start {
type Param = {
/**
* 指定录音的时长,单位 ms ,如果传入了合法的 duration ,在到达指定的 duration 后会自动停止录音,最大值 600000(10 分钟),默认值 60000(1 分钟)
*/
duration?: number
/**
* 采样率,有效值 8000/16000/44100
*/
sampleRate?: number
/**
* 录音通道数,有效值 1/2
*/
numberOfChannels?: number
/**
* 编码码率,有效值见下表格
*/
encodeBitRate?: number
/**
* 音频格式,有效值 aac/mp3
*/
format?: string
/**
* 指定帧大小,单位 KB。传入 frameSize 后,每录制指定帧大小的内容后,会回调录制的文件内容,不指定则不会回调。暂仅支持 mp3 格式。
*/
frameSize?: number
}
}
namespace onStop {
type Param = (res: ParamParam) => any
type ParamParam = {
/**
* 录音文件的临时路径
*/
tempFilePath: string
}
}
namespace onFrameRecorded {
type Param = (res: ParamParam) => any
type ParamParam = {
/**
* 录音分片结果数据
*/
frameBuffer: ArrayBuffer
/**
* 当前帧是否正常录音结束前的最后一帧
*/
isLastFrame: boolean
}
}
namespace onError {
type Param = (res: ParamParam) => any
type ParamParam = {
/**
* 错误信息
*/
errMsg: string
}
}
}
class RecorderManager {
/**
* 开始录音
*/
start(options: RecorderManager.start.Param): void
/**
* 暂停录音
*/
pause(): void
/**
* 继续录音
*/
resume(): void
/**
* 停止录音
*/
stop(): void
/**
* 录音开始事件
*/
onStart(callback?: () => void): void
/**
* 录音暂停事件
*/
onPause(callback?: () => void): void
/**
* 录音停止事件,会回调文件地址
*/
onStop(callback?: RecorderManager.onStop.Param): void
/**
* 已录制完指定帧大小的文件,会回调录音分片结果数据。如果设置了 frameSize ,则会回调此事件
*/
onFrameRecorded(callback?: RecorderManager.onFrameRecorded.Param): void
/**
* 录音错误事件, 会回调错误信息
*/
onError(callback?: RecorderManager.onError.Param): void
}
namespace playVoice {
type Param = {
/**
* 需要播放的语音文件的文件路径
*/
filePath: string
/**
* 指定录音时长,到达指定的录音时长后会自动停止录音,单位:秒,默认值:60
*
* @since 1.6.0
*/
duration?: number
}
}
/**
* **注意:1.6.0 版本开始,本接口不再维护。建议使用能力更强的 [Saven.createInnerAudioContext](https://developers.weixin.qq.com/miniprogram/dev/api/createInnerAudioContext.html) 接口**
*
* 开始播放语音,同时只允许一个语音文件正在播放,如果前一个语音文件还没播放完,将中断前一个语音播放。
*
* **示例代码:**
*
* ```javascript
* Saven.startRecord({
* success: function(res) {
* var tempFilePath = res.tempFilePath
* Saven.playVoice({
* filePath: tempFilePath,
* complete: function(){
* }
* })
* }
* })
* ```
* @see https://developers.weixin.qq.com/miniprogram/dev/api/media-voice.html#wxplayvoiceobject
*/
function playVoice(OBJECT: playVoice.Param): Promise<any>
/**
* 暂停正在播放的语音。再次调用Saven.playVoice播放同一个文件时,会从暂停处开始播放。如果想从头开始播放,需要先调用 Saven.stopVoice。
*
* **示例代码:**
*
* ```javascript
* Saven.startRecord({
* success: function(res) {
* var tempFilePath = res.tempFilePath
* Saven.playVoice({
* filePath: tempFilePath
* })
*
* setTimeout(function() {
* //暂停播放
* Saven.pauseVoice()
* }, 5000)
* }
* })
* ```
* @see https://developers.weixin.qq.com/miniprogram/dev/api/media-voice.html#wxpausevoice
*/
function pauseVoice(): void
/**
* 结束播放语音。
*
* **示例代码:**
*
* ```javascript
* Saven.startRecord({
* success: function(res) {
* var tempFilePath = res.tempFilePath
* Saven.playVoice({
* filePath:tempFilePath
* })
*
* setTimeout(function(){
* Saven.stopVoice()
* }, 5000)
* }
* })
* ```
* @see https://developers.weixin.qq.com/miniprogram/dev/api/media-voice.html#wxstopvoice
*/
function stopVoice(): void
namespace getBackgroundAudioPlayerState {
type Promised = {
/**
* 选定音频的长度(单位:s),只有在当前有音乐播放时返回
*/
duration: number
/**
* 选定音频的播放位置(单位:s),只有在当前有音乐播放时返回
*/
currentPosition: number
/**
* 播放状态(2:没有音乐在播放,1:播放中,0:暂停中)
*/
status: 0 | 1 | 2
/**
* 音频的下载进度(整数,80 代表 80%),只有在当前有音乐播放时返回
*/
downloadPercent: number
/**
* 歌曲数据链接,只有在当前有音乐播放时返回
*/
dataUrl: string
}
type Param = {}
}
/**
* **注意:1.2.0 版本开始,本接口不再维护。建议使用能力更强的 [Saven.getBackgroundAudioManager](https://developers.weixin.qq.com/miniprogram/dev/api/getBackgroundAudioManager.html) 接口**
*
* 获取后台音乐播放状态。
*
* **示例代码:**
*
* ```javascript
* Saven.getBackgroundAudioPlayerState({
* success: function(res) {
* var status = res.status
* var dataUrl = res.dataUrl
* var currentPosition = res.currentPosition
* var duration = res.duration
* var downloadPercent = res.downloadPercent
* }
* })
* ```
* @see https://developers.weixin.qq.com/miniprogram/dev/api/media-background-audio.html#wxgetbackgroundaudioplayerstateobject
*/
function getBackgroundAudioPlayerState(OBJECT?: getBackgroundAudioPlayerState.Param): Promise<getBackgroundAudioPlayerState.Promised>
namespace playBackgroundAudio {
type Param = {
/**
* 音乐链接,目前支持的格式有 m4a, aac, mp3, wav
*/
dataUrl: string
/**
* 音乐标题
*/
title?: string
/**
* 封面URL
*/
coverImgUrl?: string
}
}
/**
* 使用后台播放器播放音乐,对于微信客户端来说,只能同时有一个后台音乐在播放。当用户离开小程序后,音乐将暂停播放;当用户点击“显示在聊天顶部”时,音乐不会暂停播放;当用户在其他小程序占用了音乐播放器,原有小程序内的音乐将停止播放。
*
* **OBJECT参数说明:**
*
* ```javascript
* Saven.playBackgroundAudio({
* dataUrl: '',
* title: '',
* coverImgUrl: ''
* })
* ```
* @see https://developers.weixin.qq.com/miniprogram/dev/api/media-background-audio.html#wxplaybackgroundaudioobject
*/
function playBackgroundAudio(OBJECT: playBackgroundAudio.Param): Promise<any>
/**
* 暂停播放音乐。
*
* **示例代码**
*
* **示例:**
*
* ```javascript
* Saven.pauseBackgroundAudio()
* ```
* @see https://developers.weixin.qq.com/miniprogram/dev/api/media-background-audio.html#wxpausebackgroundaudio
*/
function pauseBackgroundAudio(): void
namespace seekBackgroundAudio {
type Param = {
/**
* 音乐位置,单位:秒
*/
position: number
}
}
/**
* 控制音乐播放进度。
*
* **OBJECT参数说明:**
*
* ```javascript
* Saven.seekBackgroundAudio({
* position: 30
* })
* ```
* @see https://developers.weixin.qq.com/miniprogram/dev/api/media-background-audio.html#wxseekbackgroundaudioobject
*/
function seekBackgroundAudio(OBJECT: seekBackgroundAudio.Param): Promise<any>
/**
* 停止播放音乐。
*
* **示例代码**
*
* **示例:**
*
* ```javascript
* Saven.stopBackgroundAudio()
* ```
* @see https://developers.weixin.qq.com/miniprogram/dev/api/media-background-audio.html#wxstopbackgroundaudio
*/
function stopBackgroundAudio(): void
/**
* 监听音乐播放。
* @see https://developers.weixin.qq.com/miniprogram/dev/api/media-background-audio.html#wxonbackgroundaudioplaycallback
*/
function onBackgroundAudioPlay(CALLBACK: any): void
/**
* 监听音乐暂停。
* @see https://developers.weixin.qq.com/miniprogram/dev/api/media-background-audio.html#wxonbackgroundaudiopausecallback
*/
function onBackgroundAudioPause(CALLBACK: any): void
/**
* 监听音乐停止。
*
* **bug & tip:**
*
* 1. `bug`: `iOS` `6.3.30` Saven.seekBackgroundAudio 会有短暂延迟
* @see https://developers.weixin.qq.com/miniprogram/dev/api/media-background-audio.html#wxonbackgroundaudiostopcallback
*/
function onBackgroundAudioStop(CALLBACK: any): void
/**
* @since 1.2.0
*
* 获取**全局唯一**的背景音频管理器 `backgroundAudioManager`。
*
* **errcode 说明:**
*
* errCode | 说明
* ------------|---------
* 10001 | 系统错误
* 10002 | 网络错误
* 10003 | 文件错误
* 10004 | 格式错误
* -1 | 未知错误
*
* **示例代码:**
*
* ```javascript
* const backgroundAudioManager = Saven.getBackgroundAudioManager()
*
* backgroundAudioManager.title = '此时此刻'
* backgroundAudioManager.epname = '此时此刻'
* backgroundAudioManager.singer = '许巍'
* backgroundAudioManager.coverImgUrl = 'http://y.gtimg.cn/music/photo_new/T002R300x300M000003rsKF44GyaSk.jpg?max_age=2592000'
* backgroundAudioManager.src = 'http://ws.stream.qqmusic.qq.com/M500001VfvsJ21xFqb.mp3?guid=ffffffff82def4af4b12b3cd9337d5e7&uin=346897220&vkey=6292F51E1E384E061FF02C31F716658E5C81F5594D561F2E88B854E81CAAB7806D5E4F103E55D33C16F3FAC506D1AB172DE8600B37E43FAD&fromtag=46' // 设置了 src 之后会自动播放
* ```
* @see https://developers.weixin.qq.com/miniprogram/dev/api/getBackgroundAudioManager.html#wxgetbackgroundaudiomanager
*/
function getBackgroundAudioManager(): BackgroundAudioManager
class BackgroundAudioManager {
/**
* 当前音频的长度(单位:s),只有在当前有合法的 src 时返回
*
* @readonly
*/
readonly duration: number
/**
* 当前音频的播放位置(单位:s),只有在当前有合法的 src 时返回
*
* @readonly
*/
readonly currentTime: number
/**
* 当前是是否暂停或停止状态,true 表示暂停或停止,false 表示正在播放
*
* @readonly
*/
readonly paused: boolean
/**
* 音频的数据源,默认为空字符串,**当设置了新的 src 时,会自动开始播放** ,目前支持的格式有 m4a, aac, mp3, wav
*/
src: string
/**
* 音频开始播放的位置(单位:s)
*/
startTime: number
/**
* 音频缓冲的时间点,仅保证当前播放时间点到此时间点内容已缓冲。
*
* @readonly
*/
buffered: number
/**
* 音频标题,用于做原生音频播放器音频标题。原生音频播放器中的分享功能,分享出去的卡片标题,也将使用该值。
*/
title: string
/**
* 专辑名,原生音频播放器中的分享功能,分享出去的卡片简介,也将使用该值。
*/
epname: string
/**
* 歌手名,原生音频播放器中的分享功能,分享出去的卡片简介,也将使用该值。
*/
singer: string
/**
* 封面图url,用于做原生音频播放器背景图。原生音频播放器中的分享功能,分享出去的卡片配图及背景也将使用该图。
*/
coverImgUrl: string
/**
* 页面链接,原生音频播放器中的分享功能,分享出去的卡片简介,也将使用该值。
*/
webUrl: string
/**
* 音频协议。默认值为 'http',设置 'hls' 可以支持播放 HLS 协议的直播音频
*
* @since 1.9.94
*/
protocol: string
/**
* 播放
*/
play(): void
/**
* 暂停
*/
pause(): void
/**
* 停止
*/
stop(): void
/**
* 跳转到指定位置,单位 s
*/
seek(position: any): void
/**
* 背景音频进入可以播放状态,但不保证后面可以流畅播放
*/
onCanplay(callback?: () => void): void
/**
* 背景音频播放事件
*/
onPlay(callback?: () => void): void
/**
* 背景音频暂停事件
*/
onPause(callback?: () => void): void
/**
* 背景音频停止事件
*/
onStop(callback?: () => void): void
/**
* 背景音频自然播放结束事件
*/
onEnded(callback?: () => void): void
/**
* 背景音频播放进度更新事件
*/
onTimeUpdate(callback?: () => void): void
/**
* 用户在系统音乐播放面板点击上一曲事件(iOS only)
*/
onPrev(callback?: () => void): void
/**
* 用户在系统音乐播放面板点击下一曲事件(iOS only)
*/
onNext(callback?: () => void): void
/**
* 背景音频播放错误事件
*/
onError(callback?: () => void): void
/**
* 音频加载中事件,当音频因为数据不足,需要停下来加载时会触发
*/
onWaiting(callback?: () => void): void
}
/**
* **注意:1.6.0 版本开始,本接口不再维护。建议使用能力更强的 [Saven.createInnerAudioContext](https://developers.weixin.qq.com/miniprogram/dev/api/createInnerAudioContext.html) 接口**
*
* 创建并返回 audio 上下文 `audioContext` 对象。在自定义组件下,第二个参数传入组件实例this,以操作组件内 `<audio/>` 组件
*
* **audioContext:**
*
* `audioContext` 通过 audioId 跟一个 `<audio/>` 组件绑定,通过它可以操作对应的 `<audio/>` 组件。
*
* **示例代码:**
*
* ```html
* <!-- audio.wxml -->
* <audio src="{{src}}" id="myAudio" ></audio>
*
* <button type="primary" bindtap="audioPlay">播放</button>
* <button type="primary" bindtap="audioPause">暂停</button>
* <button type="primary" bindtap="audio14">设置当前播放时间为14秒</button>
* <button type="primary" bindtap="audioStart">回到开头</button>
* ```
*
* **示例代码:**
*
* ```javascript
* // audio.js
* Page({
* onReady: function (e) {
* // 使用 Saven.createAudioContext 获取 audio 上下文 context
* this.audioCtx = Saven.createAudioContext('myAudio')
* this.audioCtx.setSrc('http://ws.stream.qqmusic.qq.com/M500001VfvsJ21xFqb.mp3?guid=ffffffff82def4af4b12b3cd9337d5e7&uin=346897220&vkey=6292F51E1E384E06DCBDC9AB7C49FD713D632D313AC4858BACB8DDD29067D3C601481D36E62053BF8DFEAF74C0A5CCFADD6471160CAF3E6A&fromtag=46')
* this.audioCtx.play()
* },
* data: {
* src: ''
* },
* audioPlay: function () {
* this.audioCtx.play()
* },
* audioPause: function () {
* this.audioCtx.pause()
* },
* audio14: function () {
* this.audioCtx.seek(14)
* },
* audioStart: function () {
* this.audioCtx.seek(0)
* }
* })
* ```
* @see https://developers.weixin.qq.com/miniprogram/dev/api/api-audio.html#wxcreateaudiocontextaudioid-this
*/
function createAudioContext(audioId: string, instance?: any): AudioContext
class AudioContext {
/**
* 音频的地址
*/
setSrc(src: string): void
/**
* 播放
*/
play(): void
/**
* 暂停
*/
pause(): void
/**
* 跳转到指定位置,单位 s
*/
seek(position: number): void
}
/**
* @since 1.6.0
*
* 创建并返回内部 audio 上下文 `innerAudioContext` 对象。_本接口是 `Saven.createAudioContext` 升级版。_
*
* **errCode 说明:**
*
* errCode | 说明
* ------------|---------
* 10001 | 系统错误
* 10002 | 网络错误
* 10003 | 文件错误
* 10004 | 格式错误
* -1 | 未知错误
*
* **示例代码:**
*
* ```javascript
* const innerAudioContext = Saven.createInnerAudioContext()
* innerAudioContext.autoplay = true
* innerAudioContext.src = 'http://ws.stream.qqmusic.qq.com/M500001VfvsJ21xFqb.mp3?guid=ffffffff82def4af4b12b3cd9337d5e7&uin=346897220&vkey=6292F51E1E384E061FF02C31F716658E5C81F5594D561F2E88B854E81CAAB7806D5E4F103E55D33C16F3FAC506D1AB172DE8600B37E43FAD&fromtag=46'
* innerAudioContext.onPlay(() => {
* console.log('开始播放')
* })
* innerAudioContext.onError((res) => {
* console.log(res.errMsg)
* console.log(res.errCode)
* })
* ```
* @see https://developers.weixin.qq.com/miniprogram/dev/api/createInnerAudioContext.html#wxcreateinneraudiocontext
*/
function createInnerAudioContext(): InnerAudioContext
class InnerAudioContext {
/**
* 音频的数据链接,用于直接播放。
*/
src: string
/**
* 开始播放的位置(单位:s),默认 0
*/
startTime: number
/**
* 是否自动开始播放,默认 false
*/
autoplay: boolean
/**
* 是否循环播放,默认 false
*/
loop: boolean
/**
* 是否遵循系统静音开关,当此参数为 false 时,即使用户打开了静音开关,也能继续发出声音,默认值 true
*/
obeyMuteSwitch: boolean
/**
* 当前音频的长度(单位:s),只有在当前有合法的 src 时返回
*
* @readonly
*/
duration: number
/**
* 当前音频的播放位置(单位:s),只有在当前有合法的 src 时返回,时间不取整,保留小数点后 6 位
*
* @readonly
*/
currentTime: number
/**
* 当前是是否暂停或停止状态,true 表示暂停或停止,false 表示正在播放
*
* @readonly
*/
paused: boolean
/**
* 音频缓冲的时间点,仅保证当前播放时间点到此时间点内容已缓冲。
*
* @readonly
*/
buffered: number
/**
* 音量。范围 0~1。
*
* @since 1.9.90
*/
volume: number
/**
* 播放
*/
play(): void
/**
* 暂停
*/
pause(): void
/**
* 停止
*/
stop(): void
/**
* 跳转到指定位置,单位 s
*/
seek(position: number): void
/**
* 销毁当前实例
*/
destroy(): void
/**
* 音频进入可以播放状态,但不保证后面可以流畅播放
*/
onCanplay(callback?: () => void): void
/**
* 音频播放事件
*/
onPlay(callback?: () => void): void
/**
* 音频暂停事件
*/
onPause(callback?: () => void): void
/**
* 音频停止事件
*/
onStop(callback?: () => void): void
/**
* 音频自然播放结束事件
*/
onEnded(callback?: () => void): void
/**
* 音频播放进度更新事件