diff --git a/README.md b/README.md index 003022c9b202ee1ca2d6195e7d8e558ca4f788cf..baa6a4e8781855449ac23acf2777a6cbfb16eae9 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,9 @@ `uni-app` 是一个使用 `Vue.js` 开发小程序、H5、App的统一前端框架。官网地址:[https://uniapp.dcloud.io](https://uniapp.dcloud.io) -开发者使用 `Vue` 语法编写代码,`uni-app` 框架将其编译到 小程序(微信/支付宝/百度/字节跳动)、App(iOS/Android)、H5等多个平台,保证其正确运行并达到优秀体验。 +开发者使用 `Vue` 语法编写代码,`uni-app` 框架将其编译到 小程序(微信/支付宝/百度/字节跳动/QQ)、App(iOS/Android)、H5等多个平台,保证其正确运行并达到优秀体验。 -同时,`uni-app` 也是更优秀的小程序开发框架,拥有更高的性能(见[评测](https://juejin.im/post/5ca1736af265da30ae314248#comment))、更丰富的周边生态(见[插件市场](https://ext.dcloud.net.cn/))。 +同时,`uni-app` 也是更优秀的小程序开发框架,拥有更高的性能(见[评测](https://juejin.im/post/5ca1736af265da30ae314248))、更丰富的周边生态(见[插件市场](https://ext.dcloud.net.cn/))。 ## 扫码体验 diff --git a/docs/404.md b/docs/404.md new file mode 100644 index 0000000000000000000000000000000000000000..746ff4b2bc2a49c254076c2dee1c7d6ea968a874 --- /dev/null +++ b/docs/404.md @@ -0,0 +1,2 @@ +

404

+

Not Found

\ No newline at end of file diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000000000000000000000000000000000000..7320afc595424c6940ce3d37de929ff2b27783ef --- /dev/null +++ b/docs/README.md @@ -0,0 +1,154 @@ + +```uni-app``` 是一个使用 [Vue.js](https://vuejs.org/) 开发所有前端应用的框架,开发者编写一套代码,可编译到iOS、Android、H5、以及各种小程序等多个平台。 + +即使不跨端,```uni-app```同时也是更好的小程序开发框架。详见[评测](https://ask.dcloud.net.cn/article/35947) + +
+

快速体验

+

一套代码编到7个平台,难以置信吗?眼见为实,扫描7个二维码,亲自体验最全面的跨平台效果!

+
+ +
+ +
+ Android版 +
+ +
+ +
+ iOS版 +
+ +
+ +
+ H5版 +
+ +
+ 微信小程序版 +
+ +
+ 支付宝小程序版 +
+ +
+ 百度小程序版 +
+ +
+ +
+ 头条小程序版 +
+
+

+ 注:Appstore、百度、头条平台不能提交简单demo,故补充了一些其他功能。
+

+
+ +### uni-app视频介绍 + +我们精心准备了一个简单的十分钟介绍视频,方便你快速了解```uni-app```的主要特征: + + + +### 为什么要选择uni-app? + +```uni-app```在跨端数量、扩展能力、性能体验、周边生态、学习成本、开发成本等6大关键指标上拥有更强的优势。 + +
+
+
+ +
+
+
跨端数量更多
+

一套代码,可发布到IOS、Android、小程序、H5等多个平台。

+
+
+
+
+ +
+
+
平台能力不受限
+

在跨端的同时,通过条件编译+平台特有API调用,可以优雅的为某平台写个性化代码,调用专有能力而不影响其他平台。

+

支持原生代码混写和原生sdk集成。

+
+
+
+
+ +
+
+
性能体验优秀
+

体验更好的Hybrid框架,加载新页面速度更快。

+

App端支持weex原生渲染,可支撑更流畅的用户体验。

+

小程序端的性能优于市场其他框架。评测

+
+
+
+
+ +
+
+
周边生态丰富
+

丰富的插件市场,各种轮子拿来即用。

+

支持NPM、支持小程序组件和SDK、兼容mpvue组件和项目、兼容weex组件。

+

微信生态的各种sdk可直接用于跨平台App。

+
+
+
+
+ +
+
+
学习成本低
+

基于通用的前端技术栈,采用vue语法+微信小程序api,无额外学习成本。

+
+
+
+
+ +
+
+
开发成本低
+

不止开发成本,招聘、管理、测试各方面成本都大幅下降。

+

HBuilderX是高效开发神器,熟练掌握后研发效率至少翻倍(即便只开发一个平台)。

+
+
+
+ + + +### 功能框架 + +从下面```uni-app```功能框架图可看出,```uni-app```在跨平台的过程中,不牺牲平台特色,可优雅的调用平台专有能力,真正做到海纳百川、各取所长。 + +![](https://img-cdn-qiniu.dcloud.net.cn/uniapp/doc/uni0124.png) + +### 一套代码,运行到多个平台 + +```uni-app```实现了一套代码,同时运行到多个平台;如下图所示,一套代码,同时运行到iOS模拟器、Android模拟器、H5、微信开发者工具、支付宝小程序Studio、百度开发者工具、字节跳动开发者工具(底部7个终端选项卡代表7个终端模拟器): + +![](http://img.cdn.aliyun.dcloud.net.cn/guide/uniapp/dev1x7.png) + +实际运行效果如下(点击图片可放大): + +![](http://img.cdn.aliyun.dcloud.net.cn/guide/uniapp/run1x7.png) diff --git a/docs/_navbar.md b/docs/_navbar.md new file mode 100644 index 0000000000000000000000000000000000000000..f200331aeefdd47818f3c01e34efcbdce0bbc76b --- /dev/null +++ b/docs/_navbar.md @@ -0,0 +1,24 @@ +* [介绍](README.md) +* [框架](collocation/pages.md) +* [组件](component/README.md) +* [API](api/README.md) +* 其它规范 + - [App扩展规范HTML5 Plus](http://www.html5plus.org/doc/h5p.html) + - [微信小程序](https://developers.weixin.qq.com/miniprogram/dev/framework/) + - [支付宝小程序](https://docs.alipay.com/mini/developer/getting-started) + - [百度小程序](https://smartprogram.baidu.com/docs/develop/tutorial/codedir/) + - [头条小程序](https://developer.toutiao.com/docs/framework/) + - [QQ小程序](https://q.qq.com/wiki/develop/miniprogram/frame/) + - [Weex](https://weex.apache.org/cn/guide/) + + + +
+ + + +
\ No newline at end of file diff --git a/docs/_sidebar.md b/docs/_sidebar.md new file mode 100644 index 0000000000000000000000000000000000000000..220e3fefa0a0057d2ec6c7c18dec734fc4e1f6a9 --- /dev/null +++ b/docs/_sidebar.md @@ -0,0 +1,89 @@ +* [什么是 uni-app](README.md) +* [快速上手](quickstart.md) +* [如何学习](resource.md) +* [框架简介](frame.md) +* [使用 Vue.js 注意事项](use.md) +* [使用 Weex/nvue 注意事项](use-weex.md) +* [使用 HTML5+ 注意事项](use-html5plus.md) +* [条件编译](platform.md) +* [uni-app 跨端开发注意事项](matter.md) +* [高效开发技巧](snippet.md) +* [性能优化建议](performance.md) +* [开放生态](ecosystem.md) +* [运营服务](cloud.md) +* [案例](case.md) +* [开源项目资源汇总](casecode.md) +* [从其他项目转uni-app](translate.md) +* [选型评估指南](select.md) +* [常见问题](faq.md) +* [更新日志](//uniapp.dcloud.io/release) + + +
  • 插件市场
  • +
  • 需求墙
  • +
  • 赞助我们
  • +
    + + +
    +
    论坛
    +
    +
    +
    + +
    +
    + 代码仓库:码云GitHub +
    +
    +
    +
    + +
    +
    官方QQ交流群
    +
    群26:147867597  点此加入
    +
    群35:713420817(2000人已满)
    +
    群34:530305531(2000人已满)
    +
    群33:498071674(2000人已满)
    +
    群32:166188631(500人已满)
    +
    群31:567471669(500人已满)
    +
    群30:371046920(500人已满)
    +
    群29:202965481(500人已满)
    +
    群28:166188776(2000人已满
    +
    群27:811363410(2000人已满
    + +
    群25:165297000(500人已满)
    +
    群24:672494800(500人已满)
    +
    群23:599958679(500人已满)
    +
    群22:687186952(1000人已满)
    +
    群21:717019120(2000人已满)
    +
    群20:165796402(500人已满)
    +
    群19:165657124(1000人已满)
    +
    群18:698592271(500人已满)
    +
    群17:951348804(1000人已满)
    +
    群16:719211033(1000人已满)
    +
    群15:516984120(500人已满)
    +
    群14:465953250(500人已满)
    +
    群13:699478442(500人已满)
    +
    群12:884860657(500人已满)
    +
    群11:296811328(1000人已满)
    +
    群10:959059626(2000人已满)
    +
    群9:775128777(500人已满)
    +
    群8:695442854(500人已满)
    +
    群7:942061423(500人已满)
    +
    群6:697264024(2000人已满)
    +
    群5:731951419(500人已满)
    +
    群4:942702595(1000人已满)
    +
    群3:773794803(1000人已满)
    +
    群2:901474938(1000人已满)
    +
    群1:531031261(1000人已满)
    +
    +
    +
    + +
    +
    关注微信公众号
    + +
    +
    +
    \ No newline at end of file diff --git a/docs/api/README.md b/docs/api/README.md new file mode 100644 index 0000000000000000000000000000000000000000..51c9f54b06575bcbcc38cf78908dd7efee61b52a --- /dev/null +++ b/docs/api/README.md @@ -0,0 +1,476 @@ +框架提供丰富的 API,可以方便的调起客户端提供的能力,如获取用户信息,本地存储,支付功能等。 + +JS API命名与小程序相同。各端受自身限制,可能某些API无法使用,具体见每个API的兼容性说明。 + +除了uni-app框架内置的跨端API,各端自己的特色API也可通过[条件编译](https://uniapp.dcloud.io/platform)自由使用。 + +各端特色API规范参考各端的开发文档。其中App端的JS API参考[html5plus.org](https://www.html5plus.org/doc/h5p.html);uni-app也支持通过扩展原生插件来丰富App端的开发能力,具体参考[插件开发文档](http://ask.dcloud.net.cn/article/35408) + +## 说明 + +- uni.on 开头的 API 是监听某个事件发生的 API 接口,接受一个 CALLBACK 函数作为参数。当该事件触发时,会调用 CALLBACK 函数。 +- 如未特殊约定,其他 API 接口都接受一个 OBJECT 作为参数。 +- OBJECT 中可以指定 success,fail,complete 来接收接口调用结果。 +- **平台差异说明**若无特殊说明,则表示所有平台均支持。 + +## Promise 封装 + +uni-app 对部分 API 进行了 Promise 封装,返回数据的第一个参数是错误对象,第二个参数是返回数据。 + +详细策略如下: + +- 异步的方法,如果不传入 success、fail、complete 等 callback 参数,将以 Promise 返回数据。例如:uni.getImageInfo() +- 异步的方法且有返回对象,如果希望获取返回对象,必须至少传入一项 success、fail、complete 等 callback 参数。例如:uni.connectSocket() +- 同步的方法(即以 sync 结束),不封装 Promise。例如:uni.getSystemInfoSync() +- 以 create 开头的方法,不封装 Promise。例如:uni.createMapContext() +- 以 manager 结束的方法,不封装 Promise。例如:uni.getBackgroundAudioManager() + +使用示例: + +```js +// 默认方式 +uni.request({ + url: 'https://www.example.com/request', + success: (res) => { + console.log(res.data); + } +}); + +// Promise +uni.request({ + url: 'https://www.example.com/request' + }) + .then(data => {//data为一个数组,数组第一项为错误信息,第二项为返回数据 + var [error, res] = data; + console.log(res.data); + }) + +// Await +function async request () { + var [error, res] = await uni.request({ + url: 'https://www.example.com/request' + }); + console.log(res.data); +} +``` + +### API 列表 +#### 网络 +##### 发起请求 + +|API|说明| +|:-|:-| +|[uni.request](api/request/request?id=request)|发起网络请求| +##### 上传、下载 + +|API|说明| +|:-|:-| +|[uni.uploadFile](api/request/network-file?id=uploadfile)|上传文件| +|[uni.downloadFile](api/request/network-file?id=downloadfile)|下载文件| +##### WebSocket + +|API|说明| +|:-|:-| +|[uni.connectSocket](api/request/websocket?id=connectsocket)|创建 WebSocket 连接| +|[uni.onSocketOpen](api/request/websocket?id=onsocketopen)|监听 WebSocket 打开| +|[uni.onSocketError](api/request/websocket?id=onsocketerror)|监听 WebSocket 错误| +|[uni.sendSocketMessage](api/request/websocket?id=sendsocketmessage)|发送 WebSocket 消息| +|[uni.onSocketMessage](api/request/websocket?id=onsocketmessage)|接受 WebSocket 消息| +|[uni.closeSocket](api/request/websocket?id=closesocket)|关闭 WebSocket 连接| +|[uni.onSocketClose](api/request/websocket?id=onsocketclose)|监听 WebSocket 关闭| +##### SocketTask + +|API|说明| +|---|---| +|[SocketTask.send](/api/request/socket-task?id=sockettasksend) |通过 WebSocket 连接发送数据 | +|[SocketTask.close](/api/request/socket-task?id=sockettaskclose) |关闭 WebSocket 连接 | +|[SocketTask.onOpen](/api/request/socket-task?id=sockettaskonopen) |监听 WebSocket 连接打开事件 | +|[SocketTask.onClose](/api/request/socket-task?id=sockettaskonclose) |监听 WebSocket 连接关闭事件 | +|[SocketTask.onError](/api/request/socket-task?id=sockettaskonerror) |监听 WebSocket 错误事件 | +|[SocketTask.onMessage](/api/request/socket-task?id=sockettaskonmessage) |监听 WebSocket 接受到服务器的消息事件 | + +#### 媒体 +##### 图片 + +|API|说明| +|:-|:-| +|[uni.chooseImage](api/media/image?id=chooseimage)|从相册选择图片,或者拍照| +|[uni.previewImage](api/media/image?id=previewimage)|预览图片| +|[uni.getImageInfo](api/media/image?id=getimageinfo)|获取图片信息| +|[uni.saveImageToPhotosAlbum](api/media/image?id=saveimagetophotosalbum)|保存图片到系统相册| +##### 录音管理 + +|API|说明| +|:-|:-| +|[uni.getRecorderManager](api/media/record-manager)|录音管理| +##### 背景音频播放管理 + +|API|说明| +|:-|:-| +|[uni.getBackgroundAudioManager](api/media/background-audio-manager)|背景音频播放管理| +##### 音频组件管理 + +|API|说明| +|:-|:-| +|[uni.createInnerAudioContext](api/media/audio-context)|音频组件管理| +##### 视频 + +|API|说明| +|:-|:-| +|[uni.chooseVideo](api/media/video?id=choosevideo)|从相册选择视频,或者拍摄| +|[uni.saveVideoToPhotosAlbum](api/media/video?id=savevideotophotosalbum)|保存视频到系统相册| +|[uni.createVideoContext](/api/media/video-context?id=createvideocontext)|视频组件管理| +##### 相机组件管理 + +|API|说明| +|:-|:-| +|[uni.createCameraContext](api/media/camera-context.md)|相机组件管理| +##### 直播组件管理 + +|API|说明| +|:-|:-| +|[uni.createLivePlayerContext](api/media/live-player-context.md)|直播组件管理| + +#### 文件 + +|API|说明| +|:-|:-| +|[uni.saveFile](api/file/file?id=savefile)|保存文件| +|[uni.getSavedFileList](api/file/file?id=getsavedfilelist)|获取已保存的文件列表| +|[uni.getSavedFileInfo](api/file/file?id=getsavedfileinfo)|获取已保存的文件信息| +|[uni.removeSavedFile](api/file/file?id=removesavedfile)|删除已保存的文件信息| +|[uni.getFileInfo](/api/file/file?id=getfileinfo)|获取文件信息| +|[uni.openDocument](api/file/file?id=opendocument)|打开文件| + + +#### 数据缓存 + +|API|说明| +|:-|:-| +|[uni.getStorage](api/storage/storage?id=setstorage)|获取本地数据缓存| +|[uni.getStorageSync](api/storage/storage?id=setstoragesync)|获取本地数据缓存| +|[uni.setStorage](api/storage/storage?id=getstorage)|设置本地数据缓存| +|[uni.setStorageSync](api/storage/storage?id=getstoragesync)|设置本地数据缓存| +|[uni.getStorageInfo](api/storage/storage?id=getstorageinfo)|获取本地缓存的相关信息| +|[uni.getStorageInfoSync](api/storage/storage?id=getstorageinfosync)|获取本地缓存的相关信息| +|[uni.removeStorage](api/storage/storage?id=removestorage)|删除本地缓存内容| +|[uni.removeStorageSync](api/storage/storage?id=removestoragesync)|删除本地缓存内容| +|[uni.clearStorage](api/storage/storage?id=clearstorage)|清理本地数据缓存| +|[uni.clearStorageSync](api/storage/storage?id=clearstoragesync)|清理本地数据缓存| + + +#### 位置 +##### 获取位置 + +|API|说明| +|:-|:-| +|[uni.getLocation](api/location/location?id=getlocation)|获取当前位置| +|[uni.chooseLocation](api/location/location?id=chooselocation)|打开地图选择位置| +##### 查看位置 + +|API|说明| +|:-|:-| +|[uni.openLocation](api/location/open-location?id=openlocation)|打开内置地图| +##### 地图组件控制 + +|API|说明| +|:-|:-| +|[uni.createMapContext](api/location/map?id=createmapcontext)|地图组件控制| + + +#### 设备 +##### 系统信息 + +|API|说明| +|:-|:-| +|[uni.getSystemInfo](api/system/info?id=getsysteminfo)|获取系统信息| +|[uni.getSystemInfoSync](api/system/info?id=getsysteminfosync)|获取系统信息| +|[uni.canIUse](/api/system/info?id=caniuse)|判断应用的 API,回调,参数,组件等是否在当前版本可用| +##### 内存 + +|API|说明| +|:-|:-| +|[uni.onMemoryWarning](/api/system/memory?id=wxonmemorywarning)|监听内存不足告警事件| +##### 网络状态 + +|API|说明| +|:-|:-| +|[uni.getNetworkType](api/system/network?id=getnetworktype)|获取网络类型| +|[uni.onNetworkStatusChange](api/system/network?id=onnetworkstatuschange)|监听网络状态变化| +##### 加速度计 + +|API|说明| +|:-|:-| +|[uni.onAccelerometerChange](api/system/accelerometer?id=onaccelerometerchange)|监听加速度数据| +|[uni.startAccelerometer](api/system/accelerometer?id=startaccelerometer)|开始监听加速度数据| +|[uni.stopAccelerometer](api/system/accelerometer?id=stopaccelerometer)|停止监听加速度数据| +##### 罗盘 + +|API|说明| +|:-|:-| +|[uni.onCompassChange](api/system/compass?id=oncompasschange)|监听罗盘数据| +|[uni.startCompass](api/system/compass?id=startcompass)|开始监听罗盘数据| +|[uni.stopCompass](api/system/compass?id=stopcompass)|停止监听罗盘数据| +##### 陀螺仪 + +|API|说明| +|:-|:-| +|[uni.onGyroscopeChange](/api/system/gyroscope?id=ongyroscopechange)|监听陀螺仪数据| +|[uni.startGyroscope](/api/system/gyroscope?id=startgyroscope)|开始监听陀螺仪数据| +|[uni.stopGyroscope](/api/system/gyroscope?id=stopgyroscope)|停止监听陀螺仪数据| +##### 拨打电话 + +|API|说明| +|:-|:-| +|[uni.makePhoneCall](api/system/phone?id=makephonecall)|拨打电话| +##### 扫码 + +|API|说明| +|:-|:-| +|[uni.scanCode](api/system/barcode?id=scancode)|扫码| +##### 剪切板 + +|API|说明| +|:-|:-| +|[uni.setClipboardData](api/system/clipboard?id=setclipboarddata)|设置剪贴板内容| +|[uni.getClipboardData](api/system/clipboard?id=getclipboarddata)|获取剪贴板内容| +##### 屏幕亮度 + +|API|说明| +|:-|:-| +|[uni.setScreenBrightness](api/system/brightness?id=setscreenbrightness)|设置屏幕亮度| +|[uni.getScreenBrightness](api/system/brightness?id=getscreenbrightness)|获取屏幕亮度| +|[uni.setKeepScreenOn](api/system/brightness?id=setkeepscreenon)|设置是否保持常亮状态| +##### 用户截屏事件 + +|API|说明| +|:-|:-| +|[uni.onUserCaptureScreen](/api/system/capture-screen)|监听用户截屏事件| +##### 振动 + +|API|说明| +|:-|:-| +|[uni.vibrateLong](api/system/vibrate?id=vibratelong)|使手机发生较长时间的振动| +|[uni.vibrateShort](api/system/vibrate?id=vibrateshort)|使手机发生较短时间的振动| +##### 手机联系人 + +|API|说明| +|:-|:-| +|[uni.addPhoneContact](api/system/contact?id=addphonecontact)|添加手机通讯录| +##### 蓝牙 + +|API|说明| +|:-|:-| +|[uni.openBluetoothAdapter](/api/system/bluetooth?id=openbluetoothadapter)|初始化蓝牙模块| +|[uni.startBluetoothDevicesDiscovery](/api/system/bluetooth?id=startbluetoothdevicesdiscovery)|搜寻附近的蓝牙外围设备| +|[uni.onBluetoothDeviceFound](/api/system/bluetooth?id=onbluetoothdevicefound)|监听寻找到新设备的事件 | +|[uni.stopBluetoothDevicesDiscovery](/api/system/bluetooth?id=stopbluetoothdevicesdiscovery)|停止搜寻| +|[uni.onBluetoothAdapterStateChange](/api/system/bluetooth?id=onbluetoothadapterstatechange)|监听蓝牙适配器状态变化事件| +|[uni.getConnectedBluetoothDevices](/api/system/bluetooth?id=getconnectedbluetoothdevices)|根据 uuid 获取处于已连接状态的设备| +|[uni.getBluetoothDevices](/api/system/bluetooth?id=getbluetoothdevices)|获取已发现的蓝牙设备| +|[uni.getBluetoothAdapterState](/api/system/bluetooth?id=getbluetoothadapterstate)|获取本机蓝牙适配器状态| +|[uni.closeBluetoothAdapter](/api/system/bluetooth?id=closebluetoothadapter)|关闭蓝牙模块| +##### 低耗蓝牙 + +|API|说明| +|:-|:-| +|[uni.writeBLECharacteristicValue](/api/system/ble?id=writeblecharacteristicvalue)|向低功耗蓝牙设备特征值中写入二进制数据| +|[uni.readBLECharacteristicValue](/api/system/ble?id=readblecharacteristicvalue)|读取低功耗蓝牙设备的特征值的二进制数据值| +|[uni.onBLEConnectionStateChange](/api/system/ble?id=onbleconnectionstatechange)|监听低功耗蓝牙连接状态的改变事件| +|[uni.onBLECharacteristicValueChange](/api/system/ble?id=onblecharacteristicvaluechange)|监听低功耗蓝牙设备的特征值变化事件| +|[uni.notifyBLECharacteristicValueChange](/api/system/ble?id=notifyblecharacteristicvaluechange)|监听低功耗蓝牙设备的特征值变化事件| +|[uni.getBLEDeviceServices](/api/system/ble?id=getbledeviceservices)|获取蓝牙设备所有服务(service)| +|[uni.getBLEDeviceCharacteristics](/api/system/ble?id=getbledevicecharacteristics)|获取蓝牙设备某个服务中所有特征值(characteristic)| +|[uni.createBLEConnection](/api/system/ble?id=createbleconnection)|连接低功耗蓝牙设备| +|[uni.closeBLEConnection](/api/system/ble?id=closebleconnection)|断开与低功耗蓝牙设备的连接| +##### iBeacon + +|API|说明| +|:-|:-| +|[uni.onBeaconServiceChange](/api/system/ibeacon?id=onbeaconservicechange)|监听 iBeacon 服务状态变化事件| +|[uni.onBeaconUpdate](/api/system/ibeacon?id=onbeaconupdate)|监听 iBeacon 设备更新事件| +|[uni.getBeacons](/api/system/ibeacon?id=getbeacons)|获取所有已搜索到的 iBeacon 设备| +|[uni.startBeaconDiscovery](/api/system/ibeacon?id=startbeacondiscovery)|停止搜索附近的 iBeacon 设备| +|[uni.stopBeaconDiscovery](/api/system/ibeacon?id=stopbeacondiscovery)|开始搜索附近的 iBeacon 设备| + + + +#### 界面 +##### 交互反馈 + +|API|说明| +|:-|:-| +|[uni.showToast](api/ui/prompt?id=showtoast)|显示提示框| +|[uni.showLoading](api/ui/prompt?id=showloading)|显示加载提示框| +|[uni.hideToast](api/ui/prompt?id=hidetoast)|隐藏提示框| +|[uni.hideLoading](api/ui/prompt?id=hideloading)|隐藏提示框| +|[uni.showModal](api/ui/prompt?id=showmodal)|显示模态弹窗| +|[uni.showActionSheet](api/ui/prompt?id=showactionsheet)|显示菜单列表| +##### 设置导航条 + +|API|说明| +|:-|:-| +|[uni.setNavigationBarTitle](api/ui/navigationbar?id=setnavigationbartitle)|设置当前页面标题| +|[uni.setNavigationBarColor](/api/ui/navigationbar?id=setnavigationbarcolor)|设置页面导航条颜色| +|[uni.showNavigationBarLoading](api/ui/navigationbar?id=shownavigationbarloading)|显示导航条加载动画| +|[uni.hideNavigationBarLoading](api/ui/navigationbar?id=hidenavigationbarloading)|隐藏导航条加载动画| +##### 设置TabBar + +|API|说明| +|:-|:-| +|[uni.setTabBarItem](/api/ui/tabbar?id=settabbaritem)|动态设置 tabBar 某一项的内容| +|[uni.setTabBarStyle](/api/ui/tabbar?id=settabbarstyle)|动态设置 tabBar 的整体样式| +|[uni.hideTabBar](/api/ui/tabbar?id=hidetabbar)|隐藏 tabBar| +|[uni.showTabBar](/api/ui/tabbar?id=showtabbar)|显示 tabBar| +|[uni.setTabBarBadge](/api/ui/tabbar?id=settabbarbadge)|为 tabBar 某一项的右上角添加文本| +|[uni.removeTabBarBadge](/api/ui/tabbar?id=removetabbarbadge)|移除 tabBar 某一项右上角的文本| +|[uni.showTabBarRedDot](/api/ui/tabbar?id=showtabbarreddot)|显示 tabBar 某一项的右上角的红点| +|[uni.hideTabBarRedDot](/api/ui/tabbar?id=hidetabbarreddot)|隐藏 tabBar 某一项的右上角的红点| +##### 背景 + +|API|说明| +|:-|:-| +|[uni.setBackgroundColor](/api/ui/bgcolor?id=setbackgroundcolor)|动态设置窗口的背景色。| +|[uni.setBackgroundColor](/api/ui/bgcolor?id=setbackgroundcolor-1)|动态设置下拉背景字体、loading 图的样式。| + +##### 动画 + +|API|说明| +|:-|:-| +|[uni.createAnimation](/api/ui/animation?id=createanimation)|创建一个动画实例 animation。调用实例的方法来描述动画。最后通过动画实例的export方法导出动画数据传递给组件的animation属性。| + +##### 滚动 + +|API|说明| +|:-|:-| +|[uni.pageScrollTo](/api/ui/scroll?id=pagescrollto)|将页面滚动到目标位置。| + +##### 绘画 + +|API|说明| +|:-|:-| +|[uni.createCanvasContext](api/ui/canvas?id=createcanvascontext)|创建绘图上下文| +|[uni.canvasToTempFilePath](api/ui/canvas?id=canvastotempfilepath)|将画布内容保存成文件| +|[uni.canvasGetImageData](api/ui/canvas?id=canvasgetimagedata)|获取画布图像数据| +|[uni.canvasPutImageData](api/ui/canvas?id=canvasputimagedata)|设置画布图像数据| +##### 下拉刷新 + +|API|说明| +|:-|:-| +|[onPullDownRefresh](/api/ui/pulldown?id=onpulldownrefresh)|监听该页面用户下拉刷新事件| +|[uni.startPullDownRefresh](/api/ui/pulldown?id=startpulldownrefresh)|开始下拉刷新| +|[uni.stopPullDownRefresh](/api/ui/pulldown?id=stoppulldownrefresh)|停止当前页面下拉刷新| +##### 节点信息 + +|API|说明| +|:-|:-| +|[uni.createSelectorQuery](api/ui/nodes-info?id=createselectorquery)|创建查询请求| +|[selectorQuery.select](/api/ui/nodes-info?id=selectorquery-对象的方法列表)|根据选择器选择单个节点| +|[selectorQuery.selectAll](/api/ui/nodes-info?id=selectorquery-对象的方法列表)|根据选择器选择全部节点| +|[selectorQuery.selectViewport](/api/ui/nodes-info?id=selectorquery-对象的方法列表)|选择显示区域| +|[selectorQuery.exec](/api/ui/nodes-info?id=selectorquery-对象的方法列表)|执行查询请求| +|[nodesRef.boundingClientRect](/api/ui/nodes-info?id=nodesref-对象的方法列表)|获取布局位置和尺寸| +|[nodesRef.scrollOffset](/api/ui/nodes-info?id=nodesref-对象的方法列表)|获取滚动位置| +|[nodesRef.fields](/api/ui/nodes-info?id=nodesref-对象的方法列表)|获取任意字段| +##### 节点布局相交状态 + +|API|说明| +|:-|:-| +|[uni.createIntersectionObserver](api/ui/intersection-observer?id=createintersectionobserver)|创建 IntersectionObserver 对象| +|[intersectionObserver.relativeTo](/api/ui/intersection-observer?id=intersectionobserver-对象的方法列表)|指定参照节点| +|[intersectionObserver.relativeToViewport](/api/ui/intersection-observer?id=intersectionobserver-对象的方法列表)|指定页面显示区域作为参照区域| +|[intersectionObserver.observe](/api/ui/intersection-observer?id=intersectionobserver-对象的方法列表)|指定目标节点并开始监听| +|[intersectionObserver.disconnect](/api/ui/intersection-observer?id=intersectionobserver-对象的方法列表)|停止监听| + + +#### 路由 + +|API|说明| +|:-|:-| +|[uni.navigateTo](/api/router?id=navigateto)|保留当前页面,跳转到应用内的某个页面,使用uni.navigateBack可以返回到原页面| +|[uni.redirectTo](/api/router?id=redirectto)|关闭当前页面,跳转到应用内的某个页面| +|[uni.reLaunch](/api/router?id=relaunch)|关闭所有页面,打开到应用内的某个页面| +|[uni.switchTab](/api/router?id=switchtab)|跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面| +|[uni.navigateBack](/api/router?id=navigateback)|关闭当前页面,返回上一页面或多级页面| + + + +#### 第三方服务 + +|API|说明| +|:-|:-| +|[uni.getProvider](api/plugins/provider?id=getprovider)|获取服务供应商| +|[uni.login](api/plugins/login?id=login)|登录| +|[uni.getUserInfo](api/plugins/login?id=getuserinfo)|获取用户信息| +|[uni.share](api/plugins/share?id=share)|分享| +|[uni.requestPayment](api/plugins/payment?id=requestpayment)|支付| +|[uni.subscribePush](api/plugins/push?id=subscribepush)|开启推送| +|[uni.unsubscribePush](api/plugins/push?id=unsubscribepush)|关闭推送| +|[uni.onPush](api/plugins/push?id=onpush)|监听透传数据| +|[uni.offPush](api/plugins/push?id=offpush)|移除监听透传数据| + +#### 平台扩展 + +|API|说明| +|:-|:-| +|[uni.requireNativePlugin](/api/extend/native-plugin?id=requirenativeplugin)|引入 App 原生插件| + +#### 其他 +##### 授权 + +|API|说明| +|:-|:-| +|[uni.authorize](/api/other/authorize?id=authorize)|提前向用户发起授权请求| +##### 设置 + +|API|说明| +|:-|:-| +|[uni.openSetting](/api/other/setting?id=opensetting)|调起客户端小程序设置界面,返回用户设置的操作结果。| +|[uni.getSetting](/api/other/setting?id=getsetting)|获取用户的当前设置。| +##### 收货地址 + +|API|说明| +|:-|:-| +|[uni.chooseAddress](/api/other/choose-address?id=chooseaddress)|获取用户收货地址| +##### 获取发票抬头 + +|API|说明| +|:-|:-| +|[uni.chooseInvoiceTitle](/api/other/invoice-title?id=chooseinvoicetitle)|选择用户的发票抬头,需要用户授权 scope.invoiceTitle。| +##### 小程序跳转 + +|API|说明| +|:-|:-| +|[uni.navigateToMiniProgram](/api/other/open-miniprogram?id=navigatetominiprogram)|打开另一个小程序。| +|[uni.navigateBackMiniProgram](/api/other/open-miniprogram?id=navigatebackminiprogram)|跳转回上一个小程序,只有当另一个小程序跳转到当前小程序时才会能调用成功。| +##### 模板消息 + +|API|说明| +|:-|:-| +|[addTemplate](/api/other/template?id=addtemplate)|组合模板并添加至帐号下的个人模板库。| +|[deleteTemplate](/api/other/template?id=deletetemplate)|删除帐号下的某个模板。| +|[getTemplateLibraryById](/api/other/template?id=gettemplatelibrarybyid)|获取模板库某个模板标题下关键词库。| +|[getTemplateLibraryList](/api/other/template?id=gettemplatelibrarylist)|获取APP模板库标题列表| +|[getTemplateList](/api/other/template?id=gettemplatelist)|获取帐号下已存在的模板列表。| +|[sendTemplateMessage](/api/other/template?id=sendtemplatemessage)|发送模板消息| +|[alipay.open.app.mini.templatemessage.send](/api/other/template?id=alipayopenappminitemplatemessagesend)|支付宝小程序通过 openapi 给用户触达消息,主要为支付后的触达(通过消费id)和用户提交表单后的触达(通过formId)。| +##### 小程序更新 + +|API|说明| +|:-|:-| +|[uni.getUpdateManager](/api/other/update?id=getupdatemanager)|返回全局唯一的版本更新管理器对象: updateManager,用于管理小程序更新。| +##### 调试 + +|API|说明| +|:-|:-| +|[uni.setEnableDebug](/api/other/set-enable-debug?id=setenabledebug)|设置是否打开调试开关。此开关对正式版也能生效。| + +##### 获取第三方平台数据 + +|API|说明| +|:-|:-| +|[uni.getExtConfig](/api/other/get-extconfig?id=getextconfig)|获取第三方平台自定义的数据字段。| +|[uni.getExtConfigSync](/api/other/get-extconfig?id=getextconfigsync)|uni.getExtConfig 的同步版本。| + + + diff --git a/docs/api/_sidebar.md b/docs/api/_sidebar.md new file mode 100644 index 0000000000000000000000000000000000000000..987b1798fd4c35f48683a66d31eb810b63fc03ff --- /dev/null +++ b/docs/api/_sidebar.md @@ -0,0 +1,194 @@ +* 基础 + * [日志打印](api/log.md) + * [uni.base64ToArrayBuffer](api/base64ToArrayBuffer?id=base64toarraybuffer) + * [uni.arrayBufferToBase64](api/arrayBufferToBase64?id=arraybuffertobase64) + * [定时器](api/timer.md) + * [生命周期](api/lifetime.md) +* 网络 + * [发起请求](api/request/request.md) + * [上传、下载](api/request/network-file.md) + * [WebSocket](api/request/websocket.md) + * [SocketTask](api/request/socket-task.md) + * [mDNS](api/request/mDNS.md) + * [UDP 通信](api/request/UDP.md) +* 路由与页面跳转 + * [uni.navigateTo](/api/router?id=navigateto) + * [uni.redirectTo](/api/router?id=redirectto) + * [uni.reLaunch](/api/router?id=relaunch) + * [uni.switchTab](/api/router?id=switchtab) + * [uni.navigateBack](/api/router?id=navigateback) + * [窗口动画](/api/router?id=animation) +* 数据缓存 + * [uni.setStorage](/api/storage/storage?id=setstorage) + * [uni.setStorageSync](/api/storage/storage?id=setStorageSync) + * [uni.getStorage](/api/storage/storage?id=getStorage) + * [uni.getStorageSync](/api/storage/storage?id=getStorageSync) + * [uni.getStorageInfo](/api/storage/storage?id=getStorageInfo) + * [uni.getStorageInfoSync](/api/storage/storage?id=getStorageInfoSync) + * [uni.removeStorage](/api/storage/storage?id=removeStorage) + * [uni.removeStorageSync](/api/storage/storage?id=removeStorageSync) + * [uni.clearStorage](/api/storage/storage?id=clearStorage) + * [uni.clearStorageSync](/api/storage/storage?id=clearstoragesync) +* 位置 + * [获取位置](api/location/location.md) + * [查看位置](api/location/open-location.md) + * [地图组件控制](api/location/map.md) +* 媒体 + * [图片](api/media/image.md) + * [录音管理](api/media/record-manager.md) + * [背景音频播放管理](api/media/background-audio-manager.md) + * [音频组件控制](api/media/audio-context.md) + * [视频](api/media/video.md) + * [视频组件控制](api/media/video-context.md) + * [相机组件控制](api/media/camera-context.md) + * [直播组件控制](api/media/live-player-context.md) + * [富文本](api/media/editor-context.md) +* 设备 + * [系统信息](api/system/info.md) + * [内存](api/system/memory.md) + * [网络状态](api/system/network.md) + * [加速度计](api/system/accelerometer.md) + * [罗盘](api/system/compass.md) + * [陀螺仪](api/system/gyroscope.md) + * [拨打电话](api/system/phone.md) + * [扫码](api/system/barcode.md) + * [剪贴板](api/system/clipboard.md) + * [屏幕](api/system/brightness.md) + * [用户截屏事件](api/system/capture-screen.md) + * [振动](api/system/vibrate.md) + * [手机联系人](api/system/contact.md) + * [蓝牙](api/system/bluetooth.md) + * [低功耗蓝牙](api/system/ble.md) + * [iBeacon](api/system/ibeacon.md) + * [Wi-Fi](api/system/wifi.md) + * [电量](api/system/batteryInfo.md) + * [NFC](api/system/nfc.md) + * [设备方向](api/system/deviceMotion.md) +* [Worker](api/worder.md) +* 键盘 + * [uni.hideKeyboard](/api/key?id=hidekeyboard) +* 界面 + * [交互反馈](api/ui/prompt.md) + * [设置导航条](api/ui/navigationbar.md) + * [设置TabBar](api/ui/tabbar.md) + * [背景](api/ui/bgcolor.md) + * [动画](api/ui/animation?id=unicreateanimationobject) + * [滚动](api/ui/scroll) + * [窗口](api/ui/window.md) + * [字体](api/ui/font.md) + * [下拉刷新](api/ui/pulldown.md) + * [节点信息](api/ui/nodes-info.md) + * [节点布局相交状态](api/ui/intersection-observer.md) + * [自定义组件](api/ui/nextTick.md) + * [菜单](api/ui/menuButton.md) +* 页面和窗体 + * [页面](api/window/window.md) + * [页面通讯](api/window/communication.md) + * [subNVue原生子窗体](api/window/subNVues.md) +* 文件 + * [uni.saveFile](/api/file/file?id=savefile) + * [uni.getSavedFileList](/api/file/file?id=getSavedFileList) + * [uni.getSavedFileInfo](/api/file/file?id=getSavedFileInfo) + * [uni.removeSavedFile](/api/file/file?id=removeSavedFile) + * [uni.getFileInfo](/api/file/file?id=getFileInfo) + * [uni.openDocument](/api/file/file?id=openDocument) + * [uni.getFileSystemManager](/api/file/getFileSystemManager) +* 绘画 + * [uni.createOffscreenCanvas](api/canvas/createOffscreenCanvas.md) + * [uni.createCanvasContext](api/canvas/createCanvasContext.md) + * [uni.canvasToTempFilePath](api/canvas/canvasToTempFilePath.md) + * [uni.canvasPutImageData](api/canvas/canvasPutImageData.md) + * [uni.canvasGetImageData](api/canvas/canvasGetImageData.md) + * [CanvasContext](api/canvas/CanvasContext.md) + * [CanvasGradient](api/canvas/CanvasGradient.md) +* 第三方服务 + * [获取服务供应商](api/plugins/provider.md) + * [登录](api/plugins/login.md) + * [分享](api/plugins/share.md) + * [支付](api/plugins/payment.md) + * [推送](api/plugins/push.md) + * [语音](api/plugins/voice.md) +* 平台扩展 + * [App原生插件](api/extend/native-plugin.md) +* 其他 + * [授权](api/other/authorize.md) + * [设置](api/other/setting.md) + * [收货地址](api/other/choose-address.md) + * [获取发票抬头](api/other/invoice-title.md) + * [小程序跳转](api/other/open-miniprogram.md) + * [账号信息](api/other/getAccountInfoSync.md) + * [生物认证(指纹及人脸识别)](api/other/authentication.md) + * [运动(计步器)](api/other/sport.md) + * [统计](api/other/report.md) + * [卡券](api/other/card.md) + * [模板消息](api/other/template.md) + * [小程序更新](api/other/update.md) + * [调试](api/other/set-enable-debug.md) + * [获取第三方平台数据](api/other/get-extconfig.md) + * [广告](api/other/advertisement.md) +
  • +
    + + +
    +
    论坛
    +
    +
    +
    + +
    +
    + 代码仓库:码云GitHub +
    +
    +
    +
    + +
    +
    官方QQ交流群
    +
    群26:147867597  点此加入
    +
    群35:713420817(2000人已满)
    +
    群34:530305531(2000人已满)
    +
    群33:498071674(2000人已满)
    +
    群32:166188631(500人已满)
    +
    群31:567471669(500人已满)
    +
    群30:371046920(500人已满)
    +
    群29:202965481(500人已满)
    +
    群28:166188776(2000人已满
    +
    群27:811363410(2000人已满
    + +
    群25:165297000(500人已满)
    +
    群24:672494800(500人已满)
    +
    群23:599958679(500人已满)
    +
    群22:687186952(1000人已满)
    +
    群21:717019120(2000人已满)
    +
    群20:165796402(500人已满)
    +
    群19:165657124(1000人已满)
    +
    群18:698592271(500人已满)
    +
    群17:951348804(1000人已满)
    +
    群16:719211033(1000人已满)
    +
    群15:516984120(500人已满)
    +
    群14:465953250(500人已满)
    +
    群13:699478442(500人已满)
    +
    群12:884860657(500人已满)
    +
    群11:296811328(1000人已满)
    +
    群10:959059626(2000人已满)
    +
    群9:775128777(500人已满)
    +
    群8:695442854(500人已满)
    +
    群7:942061423(500人已满)
    +
    群6:697264024(2000人已满)
    +
    群5:731951419(500人已满)
    +
    群4:942702595(1000人已满)
    +
    群3:773794803(1000人已满)
    +
    群2:901474938(1000人已满)
    +
    群1:531031261(1000人已满)
    +
    +
    +
    + +
    +
    关注微信公众号
    + +
    +
    +
    \ No newline at end of file diff --git a/docs/api/arrayBufferToBase64.md b/docs/api/arrayBufferToBase64.md new file mode 100644 index 0000000000000000000000000000000000000000..9f03654e08d57eebfc9f1fafa9c5399b41161244 --- /dev/null +++ b/docs/api/arrayBufferToBase64.md @@ -0,0 +1,22 @@ +## uni.arrayBufferToBase64(arrayBuffer) + +将 ArrayBuffer 对象转成 Base64 字符串 + +**平台差异说明** + +|5+App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序| +|:-:|:-:|:-:|:-:|:-:|:-:| +|√|x|√|x|x|x| + +**参数说明** + +|参数|类型|必填|说明| +|:-|:-|:-|:-| +|arrayBuffer|ArrayBuffer|是|要转换成 Base64 字符串的 ArrayBuffer 对象| + +**示例** + +```javascript +const arrayBuffer = new Uint8Array([55, 55, 55]) +const base64 = uni.arrayBufferToBase64(arrayBuffer) +``` \ No newline at end of file diff --git a/docs/api/base64ToArrayBuffer.md b/docs/api/base64ToArrayBuffer.md new file mode 100644 index 0000000000000000000000000000000000000000..1146f5aba073856007877531fde7edeffaf6aa61 --- /dev/null +++ b/docs/api/base64ToArrayBuffer.md @@ -0,0 +1,22 @@ +## uni.base64ToArrayBuffer(base64) + +将 Base64 字符串转成 ArrayBuffer 对象 + +**平台差异说明** + +|5+App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序| +|:-:|:-:|:-:|:-:|:-:|:-:| +|√|x|√|x|x|x| + +**参数说明** + +|参数|类型|必填|说明| +|:-|:-|:-|:-| +|base64|String|是|要转化成 ArrayBuffer 对象的 Base64 字符串| + +**示例** + +```javascript +const base64 = 'test' +const arrayBuffer = uni.base64ToArrayBuffer(base64) +``` \ No newline at end of file diff --git a/docs/api/canvas/CanvasContext.md b/docs/api/canvas/CanvasContext.md new file mode 100644 index 0000000000000000000000000000000000000000..096364d594de86a9f3eeb266cea2e64070fadf53 --- /dev/null +++ b/docs/api/canvas/CanvasContext.md @@ -0,0 +1,1444 @@ +**属性** + +**平台差异说明** + +|5+App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序| +|:-:|:-:|:-:|:-:|:-:|:-:| +|√|√|√|x|x|√| + +### CanvasContext.fillStyle string + +填充颜色。用法同 [CanvasContext.setFillStyle()](./CanvasContext?id=canvascontextsetfillstyle)。 + +### CanvasContext.strokeStyle string + +边框颜色。用法同 [CanvasContext.setStrokeStyle()](./CanvasContext?id=canvascontextsetstrokestyle)。 + +### CanvasContext.shadowOffsetX number + +阴影相对于形状在水平方向的偏移 + +### CanvasContext.shadowOffsetY number + +阴影相对于形状在竖直方向的偏移 + +### CanvasContext.shadowColor number + +阴影的颜色 + +### CanvasContext.shadowBlur number + +阴影的模糊级别 + +### CanvasContext.lineWidth number + +线条的宽度。用法同 [CanvasContext.setLineWidth()](./CanvasContext?id=canvascontextsetlinewidth)。 + +### CanvasContext.lineCap number + +线条的端点样式。用法同 [CanvasContext.setLineCap()](./CanvasContext?id=canvascontextsetlinecap)。 + +### CanvasContext.lineJoin number + +线条的交点样式。用法同 [CanvasContext.setLineJoin()](./CanvasContext?id=canvascontextsetlinejoin)。 + +### CanvasContext.miterLimit number + +最大斜接长度。用法同 [CanvasContext.setMiterLimit()](./CanvasContext?id=canvascontextsetmiterlimit)。 + +### CanvasContext.lineDashOffset number + +虚线偏移量,初始值为0 + +### CanvasContext.font string + +当前字体样式的属性。符合 [CSS font 语法](https://developer.mozilla.org/zh-CN/docs/Web/CSS/font) 的 DOMString 字符串,至少需要提供字体大小和字体族名。默认值为 10px sans-serif。 + +### CanvasContext.globalAlpha number + +全局画笔透明度。范围 0-1,0 表示完全透明,1 表示完全不透明。 + +### CanvasContext.globalCompositeOperation string + +在绘制新形状时应用的合成操作的类型。目前安卓版本只适用于 `fill` 填充块的合成,用于 `stroke` 线段的合成效果都是 `source-over`。 + +目前支持的操作有 +* 5+App和H5端:source-over、destination-over、source-in、destination-in、source-out、destination-out、source-atop、destination-atop、lighter、darker、xor、copy +* 微信小程序安卓端:xor, source-over, source-atop, destination-out, lighter, overlay, darken, lighten, hard-light +* 微信小程序iOS端:xor, source-over, source-atop, destination-over, destination-out, lighter, multiply, overlay, darken, lighten, color-dodge, color-burn, hard-light, soft-light, difference, exclusion, saturation, luminosity + +**方法** + +**平台差异说明** + +|5+App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序| +|:-:|:-:|:-:|:-:|:-:|:-:| +|√|√|√|√|√|√| + +### CanvasContext.arc + +画一条弧线。创建一个圆可以用 ```arc()``` 方法指定其实弧度为0,终止弧度为 ```2 * Math.PI```。用 ```stroke()``` 或者 ```fill()``` 方法来在 ```canvas``` 中画弧线。 + +**参数** + +|参数|类型 |说明| +|---|--- |--- | +|x |Number |圆的x坐标 | +|y |Number |圆的y坐标| +|r|Number |圆的半径| +|sAngle |Number |起始弧度,单位弧度(在3点钟方向)| +|eAngle |Number |终止弧度| +|counterclockwise |Boolean|可选。指定弧度的方向是逆时针还是顺时针。默认是false,即顺时针。| + +**示例代码** + +```javascript +const ctx = uni.createCanvasContext('myCanvas') + +// Draw coordinates +ctx.arc(100, 75, 50, 0, 2 * Math.PI) +ctx.setFillStyle('#EEEEEE') +ctx.fill() + +ctx.beginPath() +ctx.moveTo(40, 75) +ctx.lineTo(160, 75) +ctx.moveTo(100, 15) +ctx.lineTo(100, 135) +ctx.setStrokeStyle('#AAAAAA') +ctx.stroke() + +ctx.setFontSize(12) +ctx.setFillStyle('black') +ctx.fillText('0', 165, 78) +ctx.fillText('0.5*PI', 83, 145) +ctx.fillText('1*PI', 15, 78) +ctx.fillText('1.5*PI', 83, 10) + +// Draw points +ctx.beginPath() +ctx.arc(100, 75, 2, 0, 2 * Math.PI) +ctx.setFillStyle('lightgreen') +ctx.fill() + +ctx.beginPath() +ctx.arc(100, 25, 2, 0, 2 * Math.PI) +ctx.setFillStyle('blue') +ctx.fill() + +ctx.beginPath() +ctx.arc(150, 75, 2, 0, 2 * Math.PI) +ctx.setFillStyle('red') +ctx.fill() + +// Draw arc +ctx.beginPath() +ctx.arc(100, 75, 50, 0, 1.5 * Math.PI) +ctx.setStrokeStyle('#333333') +ctx.stroke() + +ctx.draw() +``` + +![uniapp](//img-cdn-qiniu.dcloud.net.cn/uniapp/images/arc.png?t=201859) + +针对 ```arc(100, 75, 50, 0, 1.5 * Math.PI)```的三个关键坐标如下: +* 绿色: 圆心 (100, 75) +* 红色: 起始弧度 (0) +* 蓝色: 终止弧度 (1.5 * Math.PI) + +### CanvasContext.arcTo + +根据控制点和半径绘制圆弧路径。 + +```javascript +CanvasContext.arcTo(x1, y1, x2, y2, radius) +``` + +**参数** + +|属性值 |类型 |说明| +|--- |--- |--- | +|x1|Number |第一个控制点的 x 轴坐标| +|y1|Number |第一个控制点的 y 轴坐标| +|x2|Number |第二个控制点的 x 轴坐标| +|y2|Number |第二个控制点的 y 轴坐标| +|radius |Number |圆弧的半径 | + +### CanvasContext.beginPath + +开始创建一个路径,需要调用fill或者stroke才会使用路径进行填充或描边。 + +**Tip:** 在最开始的时候相当于调用了一次 ```beginPath()```。 +**Tip:** 同一个路径内的多次```setFillStyle()```、``setStrokeStyle()```、```setLineWidth()```等设置,以最后一次设置为准。 + + +**示例代码** + +```javascript +const ctx = uni.createCanvasContext('myCanvas') +// begin path +ctx.rect(10, 10, 100, 30) +ctx.setFillStyle('yellow') +ctx.fill() + +// begin another path +ctx.beginPath() +ctx.rect(10, 40, 100, 30) + +// only fill this rect, not in current path +ctx.setFillStyle('blue') +ctx.fillRect(10, 70, 100, 30) + +ctx.rect(10, 100, 100, 30) + +// it will fill current path +ctx.setFillStyle('red') +ctx.fill() +ctx.draw() +``` + +![uniapp](//img-cdn-qiniu.dcloud.net.cn/uniapp/images/fill-path.png?t=201859) +### CanvasContext.bezierCurveTo + +创建三次方贝塞尔曲线路径。 + +**Tip:** 曲线的起始点为路径中前一个点。 + +**参数** + +|参数 |类型 |说明| +|--- |--- |---| +|cp1x |Number |第一个贝塞尔控制点的 x 坐标| +|cp1y |Number |第一个贝塞尔控制点的 y 坐标| +|cp2x |Number |第二个贝塞尔控制点的 x 坐标| +|cp2y |Number |第二个贝塞尔控制点的 y 坐标| +|x|Number |结束点的 x 坐标| +|y|Number |结束点的 y 坐标| + +**示例代码** + +```javascript +const ctx = uni.createCanvasContext('myCanvas') + +// Draw points +ctx.beginPath() +ctx.arc(20, 20, 2, 0, 2 * Math.PI) +ctx.setFillStyle('red') +ctx.fill() + +ctx.beginPath() +ctx.arc(200, 20, 2, 0, 2 * Math.PI) +ctx.setFillStyle('lightgreen') +ctx.fill() + +ctx.beginPath() +ctx.arc(20, 100, 2, 0, 2 * Math.PI) +ctx.arc(200, 100, 2, 0, 2 * Math.PI) +ctx.setFillStyle('blue') +ctx.fill() + +ctx.setFillStyle('black') +ctx.setFontSize(12) + +// Draw guides +ctx.beginPath() +ctx.moveTo(20, 20) +ctx.lineTo(20, 100) +ctx.lineTo(150, 75) + +ctx.moveTo(200, 20) +ctx.lineTo(200, 100) +ctx.lineTo(70, 75) +ctx.setStrokeStyle('#AAAAAA') +ctx.stroke() + +// Draw quadratic curve +ctx.beginPath() +ctx.moveTo(20, 20) +ctx.bezierCurveTo(20, 100, 200, 100, 200, 20) +ctx.setStrokeStyle('black') +ctx.stroke() + +ctx.draw() +``` + +![uniapp](//img-cdn-qiniu.dcloud.net.cn/uniapp/images/bezier-curve.png?t=201859) + +针对 ```moveTo(20, 20)`` ```bezierCurveTo(20, 100, 200, 100, 200, 20)``` 的三个关键坐标如下: + +* 红色:起始点(20, 20) +* 蓝色:两个控制点(20, 100) (200, 100) +* 绿色:终止点(200, 20) + +### CanvasContext.clearRect + +清除画布上在该矩形区域内的内容。 + + +**参数** + +|参数|类型|说明| +|--- |--- |--- | +|x |Number |矩形区域左上角的x坐标| +|y |Number |矩形区域左上角的y坐标| +|width |Number |矩形区域的宽度| +|height |Number |矩形区域的高度| + +**示例代码** + +clearRect 并非画一个白色的矩形在地址区域,而是清空,为了有直观感受,对 canvas 加了一层背景色。 + +```javascript + +``` + +```javascript +const ctx = uni.createCanvasContext('myCanvas') +ctx.setFillStyle('red') +ctx.fillRect(0, 0, 150, 200) +ctx.setFillStyle('blue') +ctx.fillRect(150, 0, 150, 200) +ctx.clearRect(10, 10, 150, 75) +ctx.draw() +``` + +![uniapp](//img-cdn-qiniu.dcloud.net.cn/uniapp/images/clear-rect.png?t=201859) + + +### CanvasContext.clip +从原始画布中剪切任意形状和尺寸。一旦剪切了某个区域,则所有之后的绘图都会被限制在被剪切的区域内(不能访问画布上的其他区域)。可以在使用 clip() 方法前通过使用 save() 方法对当前画布区域进行保存,并在以后的任意时间对其进行恢复(通过 restore() 方法)。 + +**Tip:** 用 setFillStroke() 设置矩形线条的颜色,如果没设置默认是黑色。 + + +**示例代码** + +```javascript +const context = uni.createCanvasContext('myCanvas') + +uni.downloadFile({ + url: 'https://img-cdn-qiniu.dcloud.net.cn/uniapp/images/uni@2x.png', + success: function (res) { +context.save() +context.beginPath() +context.arc(96, 96, 48, 0, 2 * Math.PI) +context.clip() +context.drawImage(res.tempFilePath, 48, 48) + context.restore() + context.draw() + } +}) + +``` + +![uniapp](//img-cdn-qiniu.dcloud.net.cn/uniapp/images/clip.png?t=201859) + +### CanvasContext.closePath +关闭一个路径。 + +**Tip:** 关闭路径会连接起点和终点。 +**Tip:** 如果关闭路径后没有调用 ```fill()``` 或者 ```stroke()``` 并开启了新的路径,那之前的路径将不会被渲染。 + + +**示例代码** + +```javascript +const ctx = uni.createCanvasContext('myCanvas') +ctx.moveTo(10, 10) +ctx.lineTo(100, 10) +ctx.lineTo(100, 100) +ctx.closePath() +ctx.stroke() +ctx.draw() +``` + +![uniapp](//img-cdn-qiniu.dcloud.net.cn/uniapp/images/close-line.png?t=201859) + + +```javascript +const ctx = uni.createCanvasContext('myCanvas') +// begin path +ctx.rect(10, 10, 100, 30) +ctx.closePath() + +// begin another path +ctx.beginPath() +ctx.rect(10, 40, 100, 30) + +// only fill this rect, not in current path +ctx.setFillStyle('blue') +ctx.fillRect(10, 70, 100, 30) + +ctx.rect(10, 100, 100, 30) + +// it will fill current path +ctx.setFillStyle('red') +ctx.fill() +ctx.draw() +``` + +![uniapp](//img-cdn-qiniu.dcloud.net.cn/uniapp/images/close-path.png?t=201859) + +### CanvasContext.createCircularGradient +创建一个从圆心开始的渐变。返回的 [CanvasGradient](/api/canvas/CanvasGradient) 对象,需要使用 ```CanvasGradient.addColorStop()``` 来指定渐变点,至少要两个。 + +**参数** + +|参数 |类型 |定义 | +|--- |--- |--- | +|x |Number |圆心的x坐标| +|y |Number |圆心的y坐标| +|r |Number |圆的半径 | + +**示例代码** + +```javascript +const ctx = uni.createCanvasContext('myCanvas') + +// Create circular gradient +const grd = ctx.createCircularGradient(75, 50, 50) +grd.addColorStop(0, 'red') +grd.addColorStop(1, 'white') + +// Fill with gradient +ctx.setFillStyle(grd) +ctx.fillRect(10, 10, 150, 80) +ctx.draw() +``` + +![uniapp](//img-cdn-qiniu.dcloud.net.cn/uniapp/images/circular-gradient.png?t=201859) + +### CanvasContext.createLinearGradient +创建一个线性的渐变颜色。返回的 [CanvasGradient](/api/canvas/CanvasGradient) 对象,需要使用 ```CanvasGradient.addColorStop()``` 来指定渐变点,至少要两个。 + +**参数** + +|参数 |类型 |定义 | +|--- |--- |--- | +|x0 |Number |起点的x坐标| +|y0 |Number |起点的y坐标| +|x1 |Number |终点的x坐标| +|y1 |Number |终点的y坐标| + + +**示例代码** + +```javascript +const ctx = uni.createCanvasContext('myCanvas') + +// Create linear gradient +const grd = ctx.createLinearGradient(0, 0, 200, 0) +grd.addColorStop(0, 'red') +grd.addColorStop(1, 'white') + +// Fill with gradient +ctx.setFillStyle(grd) +ctx.fillRect(10, 10, 150, 80) +ctx.draw() +``` + +![uniapp](//img-cdn-qiniu.dcloud.net.cn/uniapp/images/linear-gradient.png?t=201859) + +### CanvasContext.createPattern +对指定的图像创建模式的方法,可在指定的方向上重复元图像 + +**参数** + +|参数 |类型 |说明 | +|--- |--- |--- | +|image |String |重复的图像源,仅支持包内路径和临时路径 | +|repetition |String |指定如何重复图像,有效值有: repeat, repeat-x, repeat-y, no-repeat | + +**示例代码** + +```javascript +const ctx = uni.createCanvasContext('myCanvas') +const pattern = ctx.createPattern('/path/to/image', 'repeat-x') +ctx.fillStyle = pattern +ctx.fillRect(0, 0, 300, 150) +ctx.draw() +``` + +### CanvasContext.draw +将之前在绘图上下文中的描述(路径、变形、样式)画到 canvas 中。 + +**参数** + +|参数|类型|说明|最低版本 | +|---|---|---|---| +|reserve |Boolean |非必填。本次绘制是否接着上一次绘制,即reserve参数为false,则在本次调用drawCanvas绘制之前native层应先清空画布再继续绘制;若reserver参数为true,则保留当前画布上的内容,本次调用drawCanvas绘制的内容覆盖在上面,默认 false | | +|callback |Function |绘制完成后回调|1.7.0| + +**示例代码** + +```javascript +const ctx = uni.createCanvasContext('myCanvas') + +ctx.setFillStyle('red') +ctx.fillRect(10, 10, 150, 100) +ctx.draw() +ctx.fillRect(50, 50, 150, 100) +ctx.draw() +``` + +![uniapp](//img-cdn-qiniu.dcloud.net.cn/uniapp/images/un-reserve.png?t=201859) + + +```javascript +const ctx = uni.createCanvasContext('myCanvas') + +ctx.setFillStyle('red') +ctx.fillRect(10, 10, 150, 100) +ctx.draw() +ctx.fillRect(50, 50, 150, 100) +ctx.draw(true) +``` + +![uniapp](//img-cdn-qiniu.dcloud.net.cn/uniapp/images/reserve.png?t=201859) + +### CanvasContext.drawImage +绘制图像到画布。 + +**参数** + +|参数|类型 |说明 | +|--- |---|--- | +|imageResource |String |所要绘制的图片资源 | +|dx |Number |图像的左上角在目标canvas上 X 轴的位置 | +|dy |Number |图像的左上角在目标canvas上 Y 轴的位置 | +|dWidth|Number |在目标画布上绘制图像的宽度,允许对绘制的图像进行缩放 | +|dHeight|Number |在目标画布上绘制图像的高度,允许对绘制的图像进行缩放 | +|sx |Number |源图像的矩形选择框的左上角 X 坐标 | +|sy |Number |源图像的矩形选择框的左上角 Y 坐标 | +|sWidth|Number |源图像的矩形选择框的高度 | +|sHeight |Number |源图像的矩形选择框的高度 | + +有三个版本的写法: + +* ```drawImage(dx, dy)``` +* ```drawImage(dx, dy, dWidth, dHeight)``` +* ```drawImage(sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight)``` + +**示例代码** + +```javascript +const ctx = uni.createCanvasContext('myCanvas') + +uni.chooseImage({ + success: function(res){ + ctx.drawImage(res.tempFilePaths[0], 0, 0, 150, 100) + ctx.draw() + } +}) +``` + +![uniapp](//img-cdn-qiniu.dcloud.net.cn/uniapp/images/draw-image.png?t=201859) + +### CanvasContext.fill +对当前路径中的内容进行填充。默认的填充色为黑色。 + +**Tip:** 如果当前路径没有闭合,```fill()``` 方法会将起点和终点进行连接,然后填充,详情见例一。 + +**Tip:** ```fill()``` 填充的的路径是从 ```beginPath()``` 开始计算,但是不会将 ```fillRect()``` 包含进去,详情见例二。 + +**示例代码** + +```javascript +const ctx = uni.createCanvasContext('myCanvas') +ctx.moveTo(10, 10) +ctx.lineTo(100, 10) +ctx.lineTo(100, 100) +ctx.fill() +ctx.draw() +``` + +![uniapp](//img-cdn-qiniu.dcloud.net.cn/uniapp/images/fill-line.png?t=201859) + +```javascript +const ctx = uni.createCanvasContext('myCanvas') +// begin path +ctx.rect(10, 10, 100, 30) +ctx.setFillStyle('yellow') +ctx.fill() + +// begin another path +ctx.beginPath() +ctx.rect(10, 40, 100, 30) + +// only fill this rect, not in current path +ctx.setFillStyle('blue') +ctx.fillRect(10, 70, 100, 30) + +ctx.rect(10, 100, 100, 30) + +// it will fill current path +ctx.setFillStyle('red') +ctx.fill() +ctx.draw() +``` + +![uniapp](//img-cdn-qiniu.dcloud.net.cn/uniapp/images/fill-path.png?t=201859) + +### CanvasContext.fillRect +填充一个矩形。 + +**Tip:** 用 ```setFillStyle()``` 设置矩形的填充色,如果没设置默认是黑色。 + +**参数** + +|参数 |类型 |定义 | +|--- |--- |--- | +|x |Number |矩形路径左上角的x坐标 | +|y |Number |矩形路径左上角的y坐标 | +|width |Number |矩形路径的宽度 | +|height |Number |矩形路径的高度 | + +**示例代码** + +```javascript +const ctx = uni.createCanvasContext('myCanvas') +ctx.setFillStyle('red') +ctx.fillRect(10, 10, 150, 75) +ctx.draw() +``` + +![uniapp](//img-cdn-qiniu.dcloud.net.cn/uniapp/images/fill-rect.png?t=201859) + +### CanvasContext.fillText +在画布上绘制被填充的文本。 + +**参数** + +|参数 |类型 |说明 | +|--- |--- |--- | +|text |String |在画布上输出的文本 | +|x |Number |绘制文本的左上角x坐标位置 | +|y |Number |绘制文本的左上角y坐标位置 | +|maxWidth |Number |需要绘制的最大宽度,可选 | + +**示例代码** + +```javascript +const ctx = uni.createCanvasContext('myCanvas') + +ctx.setFontSize(20) +ctx.fillText('Hello', 20, 20) +ctx.fillText('MINA', 100, 100) + +ctx.draw() +``` + + +### CanvasContext.lineTo +增加一个新点,然后创建一条从上次指定点到目标点的线。 + +**Tip:** 用 ```stroke()``` 方法来画线条 + +**参数** + +|参数 |类型|说明 | +|--- |--- |--- | +|x |Number |目标位置的x坐标| +|y |Number |目标位置的y坐标| + +**示例代码** + +```javascript +const ctx = uni.createCanvasContext('myCanvas') +ctx.moveTo(10, 10) +ctx.rect(10, 10, 100, 50) +ctx.lineTo(110, 60) +ctx.stroke() +ctx.draw() +``` + +![uniapp](//img-cdn-qiniu.dcloud.net.cn/uniapp/images/line-to.png?t=201859) + +### CanvasContext.measureText +测量文本尺寸信息,目前仅返回文本宽度。同步接口。(App端自定义组件编译模式暂时不可用) + +**参数** + +|参数 |类型 |说明 | +|--- |--- |--- | +|text |String |要测量的文本 | + +**返回** + +返回 ```TextMetrics``` 对象,结构如下: + +|参数 |类型 |说明 | +|--- |--- |--- | +|width |Number |文本的宽度 | + +**示例代码** + +```javascript +const ctx = uni.createCanvasContext('myCanvas') +ctx.font = 'italic bold 20px cursive' +const metrics = ctx.measureText('Hello World') +console.log(metrics.width) +``` + +### CanvasContext.moveTo +把路径移动到画布中的指定点,不创建线条。用 ```stroke()``` 方法来画线条。 + +**参数** + +|参数 |类型|说明 | +|--- |--- |--- | +|x |Number |目标位置的x坐标| +|y |Number |目标位置的y坐标| + +**示例代码** + +```javascript +const ctx = uni.createCanvasContext('myCanvas') +ctx.moveTo(10, 10) +ctx.lineTo(100, 10) + +ctx.moveTo(10, 50) +ctx.lineTo(100, 50) +ctx.stroke() +ctx.draw() +``` + +![uniapp](//img-cdn-qiniu.dcloud.net.cn/uniapp/images/move-to.png?t=201859) + +### CanvasContext.quadraticCurveTo +创建二次贝塞尔曲线路径。曲线的起始点为路径中前一个点。 + +**参数** + +|参数 |类型 |说明 | +|--- |--- |--- | +|cpx |Number |贝塞尔控制点的x坐标| +|cpy |Number |贝塞尔控制点的y坐标| +|x |Number |结束点的x坐标 | +|y |Number |结束点的y坐标 | + +**示例代码** + +```javascript +const ctx = uni.createCanvasContext('myCanvas') + +// Draw points +ctx.beginPath() +ctx.arc(20, 20, 2, 0, 2 * Math.PI) +ctx.setFillStyle('red') +ctx.fill() + +ctx.beginPath() +ctx.arc(200, 20, 2, 0, 2 * Math.PI) +ctx.setFillStyle('lightgreen') +ctx.fill() + +ctx.beginPath() +ctx.arc(20, 100, 2, 0, 2 * Math.PI) +ctx.setFillStyle('blue') +ctx.fill() + +ctx.setFillStyle('black') +ctx.setFontSize(12) + +// Draw guides +ctx.beginPath() +ctx.moveTo(20, 20) +ctx.lineTo(20, 100) +ctx.lineTo(200, 20) +ctx.setStrokeStyle('#AAAAAA') +ctx.stroke() + +// Draw quadratic curve +ctx.beginPath() +ctx.moveTo(20, 20) +ctx.quadraticCurveTo(20, 100, 200, 20) +ctx.setStrokeStyle('black') +ctx.stroke() + +ctx.draw() +``` + +![uniapp](//img-cdn-qiniu.dcloud.net.cn/uniapp/images/quadratic-curve-to.png?t=201859) + +针对 ```moveTo(20, 20)`` ```quadraticCurveTo(20, 100, 200, 20)``` 的三个关键坐标如下: + +* 红色:起始点(20, 20) +* 蓝色:控制点(20, 100) +* 绿色:终止点(200, 20) + +### CanvasContext.rect +创建一个矩形。 + +**Tip:** 用 fill() 或者 stroke() 方法将矩形真正的画到 canvas 中。 + +**参数** + +|参数 |类型 |说明 | +|--- |--- |--- | +|x |Number |矩形路径左上角的x坐标 | +|y |Number |矩形路径左上角的y坐标 | +|width |Number |矩形路径的宽度 | +|height |Number |矩形路径的高度 | + +**示例代码** + +```javascript +const ctx = uni.createCanvasContext('myCanvas') +ctx.rect(10, 10, 150, 75) +ctx.setFillStyle('red') +ctx.fill() +ctx.draw() +``` + +![uniapp](//img-cdn-qiniu.dcloud.net.cn/uniapp/images/fill-rect.png?t=201859) + +### CanvasContext.restore +恢复之前保存的绘图上下文。 + +**示例代码** + +```javascript +const ctx = uni.createCanvasContext('myCanvas') + +// save the default fill style +ctx.save() +ctx.setFillStyle('red') +ctx.fillRect(10, 10, 150, 100) + +// restore to the previous saved state +ctx.restore() +ctx.fillRect(50, 50, 150, 100) + +ctx.draw() +``` + +![uniapp](//img-cdn-qiniu.dcloud.net.cn/uniapp/images/save-restore.png?t=201859) + +### CanvasContext.rotate +以原点为中心,原点可以用 translate方法修改。顺时针旋转当前坐标轴。多次调用rotate,旋转的角度会叠加。 + +**参数** + +|参数 |类型 |说明 | +|--- |--- |--- | +|rotate |Number |旋转角度,以弧度计(degrees * Math.PI/180;degrees范围为0~360) | + +**示例代码** + +```javascript +const ctx = uni.createCanvasContext('myCanvas') + +ctx.strokeRect(100, 10, 150, 100) +ctx.rotate(20 * Math.PI / 180) +ctx.strokeRect(100, 10, 150, 100) +ctx.rotate(20 * Math.PI / 180) +ctx.strokeRect(100, 10, 150, 100) + +ctx.draw() +``` + +![uniapp](//img-cdn-qiniu.dcloud.net.cn/uniapp/images/rotate.png?t=201859) + +### CanvasContext.save +保存当前的绘图上下文。 + +**示例代码** + +```javascript +const ctx = wx.createCanvasContext('myCanvas') + +// save the default fill style +ctx.save() +ctx.setFillStyle('red') +ctx.fillRect(10, 10, 150, 100) + +// restore to the previous saved state +ctx.restore() +ctx.fillRect(50, 50, 150, 100) + +ctx.draw() +``` + +### CanvasContext.scale +在调用```scale```方法后,之后创建的路径其横纵坐标会被缩放。多次调用```scale```,倍数会相乘。 + +**参数** + +|参数 |类型 |说明 | +|--- |--- |--- | +|scaleWidth |Number |横坐标缩放的倍数 (1 = 100%,0.5 = 50%,2 = 200%) | +|scaleHeight|Number |纵坐标轴缩放的倍数 (1 = 100%,0.5 = 50%,2 = 200%) | + +**示例代码** + +```javascript +const ctx = uni.createCanvasContext('myCanvas') + +ctx.strokeRect(10, 10, 25, 15) +ctx.scale(2, 2) +ctx.strokeRect(10, 10, 25, 15) +ctx.scale(2, 2) +ctx.strokeRect(10, 10, 25, 15) + +ctx.draw() +``` + +![uniapp](//img-cdn-qiniu.dcloud.net.cn/uniapp/images/scale.png?t=201859) + +### CanvasContext.setFillStyle +设置填充色,如果没有设置 fillStyle,默认颜色为 black。 + +**语法** + +```javascript +canvasContext.setFillStyle(color) +canvasContext.fillStyle = color +``` + +**参数** + +|参数 |类型|定义 |说明| +|---|---|---|---| +|color|Color|Gradient Object|填充色 | + +**示例代码** + +```javascript +const ctx = uni.createCanvasContext('myCanvas') +ctx.setFillStyle('red') +ctx.fillRect(10, 10, 150, 75) +ctx.draw() +``` + +![uniapp](//img-cdn-qiniu.dcloud.net.cn/uniapp/images/fill-rect.png?t=201859) + +### CanvasContext.setFontSize +设置字体的字号。 + +|参数 |类型 |说明 | +|--- |--- |--- | +|fontSize |Number |字体的字号| + +**示例代码** + +```javascript +const ctx = uni.createCanvasContext('myCanvas') + +ctx.setFontSize(20) +ctx.fillText('20', 20, 20) +ctx.setFontSize(30) +ctx.fillText('30', 40, 40) +ctx.setFontSize(40) +ctx.fillText('40', 60, 60) +ctx.setFontSize(50) +ctx.fillText('50', 90, 90) + +ctx.draw() +``` + +![uniapp](//img-cdn-qiniu.dcloud.net.cn/uniapp/images/font-size.png?t=201859) + + +### CanvasContext.setGlobalAlpha +设置全局画笔透明度。 + +**参数** + +|参数 |类型 |范围|说明 | +|--- |--- |--- |--- | +|alpha |Number |0~1 |透明度,0 表示完全透明,1 表示完全不透明 | + +**示例代码** + +```javascript +const ctx = uni.createCanvasContext('myCanvas') + +ctx.setFillStyle('red') +ctx.fillRect(10, 10, 150, 100) +ctx.setGlobalAlpha(0.2) +ctx.setFillStyle('blue') +ctx.fillRect(50, 50, 150, 100) +ctx.setFillStyle('yellow') +ctx.fillRect(100, 100, 150, 100) + +ctx.draw() +``` + +![uniapp](//img-cdn-qiniu.dcloud.net.cn/uniapp/images/global-alpha.png?t=201859) + +### CanvasContext.setLineCap +设置线条的端点样式。 + +**参数** + +|参数 |类型 |说明 | +|--- |--- |--- | +|lineCap|String |'butt'、'round'、'square' |线条的结束端点样式 | + +**示例代码** + +```javascript +const ctx = uni.createCanvasContext('myCanvas') +ctx.beginPath() +ctx.moveTo(10, 10) +ctx.lineTo(150, 10) +ctx.stroke() + +ctx.beginPath() +ctx.setLineCap('butt') +ctx.setLineWidth(10) +ctx.moveTo(10, 30) +ctx.lineTo(150, 30) +ctx.stroke() + +ctx.beginPath() +ctx.setLineCap('round') +ctx.setLineWidth(10) +ctx.moveTo(10, 50) +ctx.lineTo(150, 50) +ctx.stroke() + +ctx.beginPath() +ctx.setLineCap('square') +ctx.setLineWidth(10) +ctx.moveTo(10, 70) +ctx.lineTo(150, 70) +ctx.stroke() + +ctx.draw() +``` + +![uniapp](//img-cdn-qiniu.dcloud.net.cn/uniapp/images/line-cap.png?t=201859) + +### CanvasContext.setLineDash +设置线条宽度。 + +**参数** + +|参数 |类型 |定义 | +|--- |--- |--- | +|pattern|Array |一组描述交替绘制线段和间距(坐标空间单位)长度的数字 | +|offset |Number |虚线偏移量 | + +**示例代码** + +```javascript +const ctx = uni.createCanvasContext('myCanvas') + +ctx.setLineDash([10, 20], 5); + +ctx.beginPath(); +ctx.moveTo(0,100); +ctx.lineTo(400, 100); +ctx.stroke(); + +ctx.draw() +``` + +![uniapp](//img-cdn-qiniu.dcloud.net.cn/uniapp/images/set-line-dash.png?t=201859) + +### CanvasContext.setLineJoin +设置线条的交点样式。 + +**参数** + +|参数 |类型 |范围 |说明| +|--- |--- |--- |---| +|lineJoin |String |'bevel'、'round'、'miter' |线条的结束交点样式 | + +**示例代码** + +```javascript +const ctx = uni.createCanvasContext('myCanvas') +ctx.beginPath() +ctx.moveTo(10, 10) +ctx.lineTo(100, 50) +ctx.lineTo(10, 90) +ctx.stroke() + +ctx.beginPath() +ctx.setLineJoin('bevel') +ctx.setLineWidth(10) +ctx.moveTo(50, 10) +ctx.lineTo(140, 50) +ctx.lineTo(50, 90) +ctx.stroke() + +ctx.beginPath() +ctx.setLineJoin('round') +ctx.setLineWidth(10) +ctx.moveTo(90, 10) +ctx.lineTo(180, 50) +ctx.lineTo(90, 90) +ctx.stroke() + +ctx.beginPath() +ctx.setLineJoin('miter') +ctx.setLineWidth(10) +ctx.moveTo(130, 10) +ctx.lineTo(220, 50) +ctx.lineTo(130, 90) +ctx.stroke() + +ctx.draw() +``` + +![uniapp](//img-cdn-qiniu.dcloud.net.cn/uniapp/images/line-join.png?t=201859) + +### CanvasContext.setLineWidth +设置线条的宽度。 + +**参数** + +|参数 |类型 |说明 | +|--- |--- |--- | +|lineWidth |Number |线条的宽度(单位是px) | + +**示例代码** + +```javascript +const ctx = uni.createCanvasContext('myCanvas') +ctx.beginPath() +ctx.moveTo(10, 10) +ctx.lineTo(150, 10) +ctx.stroke() + +ctx.beginPath() +ctx.setLineWidth(5) +ctx.moveTo(10, 30) +ctx.lineTo(150, 30) +ctx.stroke() + +ctx.beginPath() +ctx.setLineWidth(10) +ctx.moveTo(10, 50) +ctx.lineTo(150, 50) +ctx.stroke() + +ctx.beginPath() +ctx.setLineWidth(15) +ctx.moveTo(10, 70) +ctx.lineTo(150, 70) +ctx.stroke() + +ctx.draw() +``` + +![uniapp](//img-cdn-qiniu.dcloud.net.cn/uniapp/images/line-width.png?t=201859) + +### CanvasContext.setMiterLimit +设置最大斜接长度,斜接长度指的是在两条线交汇处内角和外角之间的距离。 当 ``setLineJoin()`` 为 miter 时才有效。超过最大倾斜长度的,连接处将以 lineJoin 为 bevel 来显示。 + +**参数** + +|参数 |类型 |说明 | +|--- |--- |--- | +|miterLimit |Number |最大斜接长度 | + +**示例代码** + +```javascript +const ctx = uni.createCanvasContext('myCanvas') +ctx.beginPath() +ctx.setLineWidth(10) +ctx.setLineJoin('miter') +ctx.setMiterLimit(1) +ctx.moveTo(10, 10) +ctx.lineTo(100, 50) +ctx.lineTo(10, 90) +ctx.stroke() + +ctx.beginPath() +ctx.setLineWidth(10) +ctx.setLineJoin('miter') +ctx.setMiterLimit(2) +ctx.moveTo(50, 10) +ctx.lineTo(140, 50) +ctx.lineTo(50, 90) +ctx.stroke() + +ctx.beginPath() +ctx.setLineWidth(10) +ctx.setLineJoin('miter') +ctx.setMiterLimit(3) +ctx.moveTo(90, 10) +ctx.lineTo(180, 50) +ctx.lineTo(90, 90) +ctx.stroke() + +ctx.beginPath() +ctx.setLineWidth(10) +ctx.setLineJoin('miter') +ctx.setMiterLimit(4) +ctx.moveTo(130, 10) +ctx.lineTo(220, 50) +ctx.lineTo(130, 90) +ctx.stroke() + +ctx.draw() +``` + +![uniapp](//img-cdn-qiniu.dcloud.net.cn/uniapp/images/miter-limit.png?t=201859) + +### CanvasContext.setShadow +设置阴影样式。如果没有设置,offsetX 默认值为0, offsetY 默认值为0, blur 默认值为0,color 默认值为 black。 + +**参数** + +|参数|类型|定义 |说明 | +|---|---|--- |--- | +|offsetX|Number | |阴影相对于形状在水平方向的偏移 | +|offsetY|Number | |阴影相对于形状在竖直方向的偏移 | +|blur|Number |0~100 |阴影的模糊级别,数值越大越模糊 | +|color |Color | |阴影的颜色 | + +**示例代码** + +```javascript +const ctx = uni.createCanvasContext('myCanvas') +ctx.setFillStyle('red') +ctx.setShadow(10, 50, 50, 'blue') +ctx.fillRect(10, 10, 150, 75) +ctx.draw() +``` + +![uniapp](//img-cdn-qiniu.dcloud.net.cn/uniapp/images/shadow.png?t=201859) + +### CanvasContext.setStrokeStyle +设置边框颜色。如果没有设置 fillStyle,默认颜色为 black。 + +**参数** + +|参数 |类型 |定义|说明 | +|--- |--- |---|--- | +|color|Color|Gradient Object|填充色 | + +**示例代码** + +```javascript +const ctx = uni.createCanvasContext('myCanvas') +ctx.setStrokeStyle('red') +ctx.strokeRect(10, 10, 150, 75) +ctx.draw() +``` + +![uniapp](//img-cdn-qiniu.dcloud.net.cn/uniapp/images/stroke-rect.png?t=201859) + +### CanvasContext.setTextAlign +用于设置文字的对齐 + +|参数 |类型 |定义| +|--- |--- |---| +|align |String |可选值 'left'、'center'、'right' | + +**示例代码** + +```javascript +const ctx = uni.createCanvasContext('myCanvas') + +ctx.setStrokeStyle('red') +ctx.moveTo(150, 20) +ctx.lineTo(150, 170) +ctx.stroke() + +ctx.setFontSize(15) +ctx.setTextAlign('left') +ctx.fillText('textAlign=left', 150, 60) + +ctx.setTextAlign('center') +ctx.fillText('textAlign=center', 150, 80) + +ctx.setTextAlign('right') +ctx.fillText('textAlign=right', 150, 100) + +ctx.draw() +``` + +![uniapp](//img-cdn-qiniu.dcloud.net.cn/uniapp/images/set-text-align.png?t=201859) + +### CanvasContext.setTextBaseline +用于设置文字的水平对齐 + +**参数** + +|参数 |类型|说明| +|--- |---|---| +|textBaseline |String |可选值 'top'、'bottom'、'middle'、'normal' | + +**示例代码** + +```javascript +const ctx = uni.createCanvasContext('myCanvas') + +ctx.setStrokeStyle('red') +ctx.moveTo(5, 75) +ctx.lineTo(295, 75) +ctx.stroke() + +ctx.setFontSize(20) + +ctx.setTextBaseline('top') +ctx.fillText('top', 5, 75) + +ctx.setTextBaseline('middle') +ctx.fillText('middle', 50, 75) + +ctx.setTextBaseline('bottom') +ctx.fillText('bottom', 120, 75) + +ctx.setTextBaseline('normal') +ctx.fillText('normal', 200, 75) + +ctx.draw() +``` + +![uniapp](//img-cdn-qiniu.dcloud.net.cn/uniapp/images/set-text-baseline.png?t=201859) + +### CanvasContext.setTransform +使用矩阵重新设置(覆盖)当前变换的方法 + +**语法** + +```javascript +canvasContext.setTransform(scaleX, skewX, skewY, scaleY, translateX, translateY) +``` + +**参数** + +|参数 |类型 |说明 | +|--- |--- |--- | +|scaleX |Number |水平缩放 | +|skewX |Number |水平倾斜 | +|skewY |Number |垂直倾斜 | +|scaleY |Number |垂直缩放 | +|translateX |Number |水平移动 | +|translateY |Number |垂直移动 | + +### CanvasContext.stroke +画出当前路径的边框。默认颜色色为黑色。 + +**Tip:** ``stroke()`` 描绘的的路径是从 ```beginPath()``` 开始计算,但是不会将 ```strokeRect()``` 包含进去,详情见例二。 + +**示例代码** + +```javascript +const ctx = uni.createCanvasContext('myCanvas') +ctx.moveTo(10, 10) +ctx.lineTo(100, 10) +ctx.lineTo(100, 100) +ctx.stroke() +ctx.draw() +``` + +![uniapp](//img-cdn-qiniu.dcloud.net.cn/uniapp/images/stroke-line.png?t=201859) + + +```javascript +const ctx = uni.createCanvasContext('myCanvas') +// begin path +ctx.rect(10, 10, 100, 30) +ctx.setStrokeStyle('yellow') +ctx.stroke() + +// begin another path +ctx.beginPath() +ctx.rect(10, 40, 100, 30) + +// only stoke this rect, not in current path +ctx.setStrokeStyle('blue') +ctx.strokeRect(10, 70, 100, 30) + +ctx.rect(10, 100, 100, 30) + +// it will stroke current path +ctx.setStrokeStyle('red') +ctx.stroke() +ctx.draw() +``` + +![uniapp](//img-cdn-qiniu.dcloud.net.cn/uniapp/images/stroke-path.png?t=201859) + +### CanvasContext.strokeRect +画一个矩形(非填充)。用 `setFillStroke()` 设置边框颜色,如果没设置默认是黑色。 + +**参数** + +|参数 |类型 |范围 |说明 | +|--- |--- |--- |--- | +|x |Number | |矩形路径左上角的x坐标 | +|y |Number | |矩形路径左上角的y坐标 | +|width |Number | |矩形路径的宽度 | +|height |Number | |矩形路径的高度 | + +**示例代码** + +```javascript +const ctx = uni.createCanvasContext('myCanvas') +ctx.setStrokeStyle('red') +ctx.strokeRect(10, 10, 150, 75) +ctx.draw() +``` + +![uniapp](//img-cdn-qiniu.dcloud.net.cn/uniapp/images/stroke-rect.png?t=201859) + + +### CanvasContext.strokeText +给定的 (x, y) 位置绘制文本描边的方法 + +**语法** + +```javascript +canvasContext.strokeText(text, x, y, maxWidth) +``` + + +**参数** + +|参数 |类型 |说明 | +|--- |--- |--- | +|text |String |要绘制的文本 | +|x |Number |文本起始点的 x 轴坐标 | +|y |Number |文本起始点的 y 轴坐标 | +|maxWidth |Number |需要绘制的最大宽度,可选 | + +### CanvasContext.transform +使用矩阵多次叠加当前变换的方法。 + +**参数** + +|参数 |类型 |说明 | +|--- |--- |--- | +|scaleX |Number |水平缩放 | +|skewX |Number |水平倾斜 | +|skewY |Number |垂直倾斜 | +|scaleY |Number |垂直缩放 | +|translateX |Number |水平移动 | +|translateY |Number |垂直移动 | + +### CanvasContext.translate +对当前坐标系的原点(0, 0)进行变换,默认的坐标系原点为页面左上角。 + +**参数** + +|参数 |类型 |说明 | +|--- |--- |--- | +|x |Number |水平坐标平移量 | +|y |Number |竖直坐标平移量 | + +**示例代码** + +```javascript +const ctx = uni.createCanvasContext('myCanvas') + +ctx.strokeRect(10, 10, 150, 100) +ctx.translate(20, 20) +ctx.strokeRect(10, 10, 150, 100) +ctx.translate(20, 20) +ctx.strokeRect(10, 10, 150, 100) + +ctx.draw() +``` + +![uniapp](//img-cdn-qiniu.dcloud.net.cn/uniapp/images/translate.png?t=201859) diff --git a/docs/api/canvas/CanvasGradient.md b/docs/api/canvas/CanvasGradient.md new file mode 100644 index 0000000000000000000000000000000000000000..d689cbb14dfe0aceef03c0e94fde534705584d38 --- /dev/null +++ b/docs/api/canvas/CanvasGradient.md @@ -0,0 +1,37 @@ +### CanvasGradient.addColorStop(stop,color) + +创建一个颜色的渐变点。 +- 小于最小 stop 的部分会按最小 stop 的 color 来渲染,大于最大 stop 的部分会按最大 stop 的 color 来渲染。 + +- 需要使用 ```addColorStop()``` 来指定渐变点,至少要两个。 + +#### 参数 + +|参数|类型 |定义 | +|---|---|--- | +|stop |Number(0-1)|表示渐变点在起点和终点中的位置 | +|color |Color |渐变点的颜色| + +**示例代码** + +```javascript +const ctx = uni.createCanvasContext('myCanvas') + +// Create circular gradient +const grd = ctx.createLinearGradient(30, 10, 120, 10) +grd.addColorStop(0, 'red') +grd.addColorStop(0.16, 'orange') +grd.addColorStop(0.33, 'yellow') +grd.addColorStop(0.5, 'green') +grd.addColorStop(0.66, 'cyan') +grd.addColorStop(0.83, 'blue') +grd.addColorStop(1, 'purple') + +// Fill with gradient +ctx.setFillStyle(grd) +ctx.fillRect(10, 10, 150, 80) +ctx.draw() +``` + +![uniapp](//img-cdn-qiniu.dcloud.net.cn/uniapp/images/color-stop.png?t=201859) + diff --git a/docs/api/canvas/canvasGetImageData.md b/docs/api/canvas/canvasGetImageData.md new file mode 100644 index 0000000000000000000000000000000000000000..97fca33025df855120c0f730642b82c0bf0c1912 --- /dev/null +++ b/docs/api/canvas/canvasGetImageData.md @@ -0,0 +1,45 @@ +#### uni.canvasGetImageData(OBJECT,this) + +返回一个数组,用来描述 canvas 区域隐含的像素数据,在自定义组件下,第二个参数传入自定义组件实例 this,以操作组件内 `` 组件。 + +**OBJECT参数说明:** + +|参数|类型|必填|说明| +|---|---|---|---| +|canvasId|String|是|画布标识,传入 `````` 的 canvas-id| +|x|Number|是|将要被提取的图像数据矩形区域的左上角 x 坐标| +|y|Number|是|将要被提取的图像数据矩形区域的左上角 y 坐标| +|width|Number|是|将要被提取的图像数据矩形区域的宽度| +|height|Number|是|将要被提取的图像数据矩形区域的高度| +|success|Function|否|接口调用成功的回调函数| +|fail|Function|否|接口调用失败的回调函数| +|complete|Function|否|接口调用结束的回调函数(调用成功、失败都会执行)| + +**success回调返回参数:** + +|参数|类型|说明| +|---|---|---| +|errMsg|String|| +|width|Number|图像数据矩形的宽度| +|height|Number|图像数据矩形的高度| +|data|Uint8ClampedArray|图像像素点数据,一维数组,每四项表示一个像素点的rgba| + + +**示例代码** + +```javascript +uni.canvasGetImageData({ + canvasId: 'myCanvas', + x: 0, + y: 0, + width: 100, + height: 100, + success(res) { + console.log(res.width) // 100 + console.log(res.height) // 100 + console.log(res.data instanceof Uint8ClampedArray) // true + console.log(res.data.length) // 100 * 100 * 4 + } +}) +``` + diff --git a/docs/api/canvas/canvasPutImageData.md b/docs/api/canvas/canvasPutImageData.md new file mode 100644 index 0000000000000000000000000000000000000000..4a9ff2c9ebc51905ef00f6d623561475f9e882cb --- /dev/null +++ b/docs/api/canvas/canvasPutImageData.md @@ -0,0 +1,31 @@ +#### uni.canvasPutImageData(OBJECT,this) + +将像素数据绘制到画布的方法,在自定义组件下,第二个参数传入自定义组件实例 this,以操作组件内 `` 组件 + +**OBJECT参数说明:** + +|参数|类型|必填|说明|最低版本| +|---|---|---|---|--| +|canvasId|String|是|画布标识,传入 `````` 的 canvas-id|| +|data|Uint8ClampedArray|是|图像像素点数据,一维数组,每四项表示一个像素点的rgba|| +|x|Number|是|源图像数据在目标画布中的位置偏移量(x 轴方向的偏移量)|| +|y|Number|是|源图像数据在目标画布中的位置偏移量(y 轴方向的偏移量)|| +|width|Number|是|源图像数据矩形区域的宽度|| +|height|Number|否|源图像数据矩形区域的高度|| +|success|Function|否|接口调用成功的回调函数|| +|fail|Function|否|接口调用失败的回调函数|| +|complete|Function|否|接口调用结束的回调函数(调用成功、失败都会执行)| | + +**示例代码** + +```javascript +const data = new Uint8ClampedArray([255, 0, 0, 1]) +uni.canvasPutImageData({ + canvasId: 'myCanvas', + x: 0, + y: 0, + width: 1, + data: data, + success(res) {} +}) +``` diff --git a/docs/api/canvas/canvasToTempFilePath.md b/docs/api/canvas/canvasToTempFilePath.md new file mode 100644 index 0000000000000000000000000000000000000000..4c4d9be9e29089af16d70924505ba2cf4aba286b --- /dev/null +++ b/docs/api/canvas/canvasToTempFilePath.md @@ -0,0 +1,38 @@ +#### uni.canvasToTempFilePath(OBJECT, this) + +把当前画布指定区域的内容导出生成指定大小的图片,并返回文件路径。在自定义组件下,第二个参数传入自定义组件实例 this,以操作组件内 `` 组件。 + +**OBJECT参数说明:** + +|参数 |类型 |必填 |说明 | +|---|---|---|---|---| +|x |Number |否 |画布x轴起点(默认0)| +|y |Number |否 |画布y轴起点(默认0)| +|width |Number |否 |画布宽度(默认为canvas宽度-x)| +|height |Number |否 |画布高度(默认为canvas高度-y)| +|destWidth |Number |否 |输出图片宽度(默认为 width * 屏幕像素密度)| +|destHeight |Number |否 |输出图片高度(默认为 height * 屏幕像素密度)| +|canvasId |String |是 |画布标识,传入 ```` 的 canvas-id| +|fileType |String |否 |目标文件的类型,只支持 'jpg' 或 'png'。默认为 'png'| +|quality |Number |否 |图片的质量,取值范围为 (0, 1],不在范围内时当作1.0处理| +|success |Function |否 |接口调用成功的回调函数| +|fail |Function |否 |接口调用失败的回调函数| +|complete |Function |否 |接口调用结束的回调函数(调用成功、失败都会执行) | + +**示例代码** + +```javascript +uni.canvasToTempFilePath({ + x: 100, + y: 200, + width: 50, + height: 50, + destWidth: 100, + destHeight: 100, + canvasId: 'myCanvas', + success: function(res) { + // 在H5平台下,tempFilePath 为 base64 + console.log(res.tempFilePath) + } +}) +``` diff --git a/docs/api/canvas/createCanvasContext.md b/docs/api/canvas/createCanvasContext.md new file mode 100644 index 0000000000000000000000000000000000000000..805096e5ced1f07e91006313666caf865727fff1 --- /dev/null +++ b/docs/api/canvas/createCanvasContext.md @@ -0,0 +1,18 @@ +#### uni.createCanvasContext(canvasId, this) + +#### 定义 + +创建 ```canvas``` 绘图上下文(指定 canvasId)。在自定义组件下,第二个参数传入组件实例this,以操作组件内 `````` 组件 + +**Tip:** 需要指定 canvasId,该绘图上下文只作用于对应的 `````` + +#### 参数 + +|参数|类型|说明| +|----|----|-----| +|canvasId|String |画布表示,传入定义在 `````` 的 canvas-id | +|componentInstance|Object |自定义组件实例 this ,表示在这个自定义组件下查找拥有 canvas-id 的 `````` ,如果省略,则不在任何自定义组件内查找 | + +#### 返回值 + +[CanvasContext](/api/canvas/CanvasContext.md) \ No newline at end of file diff --git a/docs/api/canvas/createOffscreenCanvas.md b/docs/api/canvas/createOffscreenCanvas.md new file mode 100644 index 0000000000000000000000000000000000000000..60990ab59353939fdfd314a1c7f4f0509b37a6c6 --- /dev/null +++ b/docs/api/canvas/createOffscreenCanvas.md @@ -0,0 +1,6 @@ + +#### uni.createOffscreenCanvas() + +创建离屏 canvas 实例 + +仅微信小程序平台支持,[规范详情](https://developers.weixin.qq.com/miniprogram/dev/api/wx.createOffscreenCanvas.html) diff --git a/docs/api/extend/native-plugin.md b/docs/api/extend/native-plugin.md new file mode 100644 index 0000000000000000000000000000000000000000..fd2cdeacaf9c29aa352c84a703d161f03f92799c --- /dev/null +++ b/docs/api/extend/native-plugin.md @@ -0,0 +1,54 @@ +### uni.requireNativePlugin(PluginName) + +引入 App 原生插件。 + +平台差异说明: + +* 5+App + +自 HXuilderX1.4 版本起,``uni-app`` 支持引入原生插件,使用方式如下: + +```javascript +const PluginName = uni.requireNativePlugin(PluginName); // PluginName 为原生插件名称 +``` + +不管是vue文件还是nvue文件,都是这个API。 + +下面以原生插件 [DCloud-RichAlert](https://ext.dcloud.net.cn/plugin?id=36) 为例,介绍如何使用此API。 + +1. 在 ``uni-app`` 项目工程中添加插件:从 [http://ext.dcloud.net.cn/plugin?id=36](http://ext.dcloud.net.cn/plugin?id=36) 下载 DCloud-RichAlert.zip ,解压到 ``uni-app`` 项目根目录下的 ``nativeplugins`` 目录(如不存在则创建),添加后目录结构为:![ uni-app](https://img-cdn-qiniu.dcloud.net.cn/uploads/article/20181226/10cd9e6a19769b9543e0a0eda2c66696.png) +2. 在页面引入原生插件,``uni.requireNativePlugin`` 使用后返回一个对象: +```javascript +const dcRichAlert = uni.requireNativePlugin('DCloud-RichAlert') +``` +3. 使用原生插件 +```javascript +dcRichAlert.show({ + position: 'bottom', + title: "提示信息", + titleColor: '#FF0000', + content: "uni-app 是一个使用 Vue.js 开发跨平台应用的前端框架!\n免费的\n免费的\n免费的\n重要的事情说三遍", + contentAlign: 'left', + checkBox: { + title: '不再提示', + isSelected: true + }, + buttons: [{ + title: '取消' + }, { + title: '否' + }, { + title: '确认', + titleColor: '#3F51B5' + }] +}, result => { + console.log(result) +}); +``` + + +**注意事项:** + +1. 插件来源为 [插件市场](http://ext.dcloud.net.cn/?cat1=5),或自己开发的插件,Android插件开发参考:[https://ask.dcloud.net.cn/article/35416](https://ask.dcloud.net.cn/article/35416),iOS插件开发参考:[https://ask.dcloud.net.cn/article/35415](https://ask.dcloud.net.cn/article/35415); +2. 不支持真机运行原生插件,仅支持云端打包运行或使用自定义基座运行; +3. 如果插件需要传递文件路径,则需要传手机文件的绝对路径,可使用 5+ [IO模块](http://www.html5plus.org/doc/zh_cn/io.html) 的相关 API 得到文件的绝对路径。 \ No newline at end of file diff --git a/docs/api/file/file.md b/docs/api/file/file.md new file mode 100644 index 0000000000000000000000000000000000000000..e9b64ac716c630603423e2eb2338053dbf604d22 --- /dev/null +++ b/docs/api/file/file.md @@ -0,0 +1,232 @@ +#### uni.saveFile(OBJECT) +保存文件到本地。 + +**平台差异说明** + +|5+App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序| +|:-:|:-:|:-:|:-:|:-:|:-:| +|√|x|√|√|√|√| + +**注意:saveFile 会把临时文件移动,因此调用成功后传入的 tempFilePath 将不可用。** + +**OBJECT 参数说明:** + +|参数名|类型|必填|说明| +|:-|:-|:-|:-| +|tempFilePath|String|是|需要保存的文件的临时路径| +|success|Function|否|返回文件的保存路径,res = {savedFilePath: '文件的保存路径'}| +|fail|Function|否|接口调用失败的回调函数| +|complete|Function|否|接口调用结束的回调函数(调用成功、失败都会执行)| + +**success 返回参数说明:** + +|参数|说明| +|:-|:-| +|savedFilePath|文件的保存路径| + +**示例代码:** + +```javascript +uni.chooseImage({ + success: function (res) { + var tempFilePaths = res.tempFilePaths; + uni.saveFile({ + tempFilePath: tempFilePaths[0], + success: function (res) { + var savedFilePath = res.savedFilePath; + } + }); + } +}); +``` + +#### uni.getSavedFileList(OBJECT) +获取本地已保存的文件列表。 + +**平台差异说明** + +|5+App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序| +|:-:|:-:|:-:|:-:|:-:|:-:| +|√|x|√|√|√|x| + +**OBJECT 参数说明:** + +|参数名|类型|必填|说明| +|:-|:-|:-|:-| +|success|Function|否|接口调用成功的回调函数,返回结果见 success 返回参数说明| +|fail|Function|否|接口调用失败的回调函数| +|complete|Function|否|接口调用结束的回调函数(调用成功、失败都会执行)| + +**success 返回参数说明:** + +|参数|类型|说明| +|:-|:-|:-| +|errMsg|String|接口调用结果| +|fileList|Array<Object>|文件列表| + +**fileList 中的项目说明:** + +|键|类型|说明| +|:-|:-|:-| +|filePath|String|文件的本地路径| +|createTime|Number|文件的保存时的时间戳,从 `1970/01/01 08:00:00` 到该时刻的秒数。| +|size|String|文件大小,以字节为单位。| + +**示例代码:** + +```javascript +uni.getSavedFileList({ + success: function (res) { + console.log(res.fileList); + } +}); +``` + +#### uni.getSavedFileInfo(OBJECT) +获取本地文件的文件信息。此接口只能用于获取已保存到本地的文件。 + +**平台差异说明** + +|5+App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序| +|:-:|:-:|:-:|:-:|:-:|:-:| +|√|x|√|√|√|x| + +**OBJECT 参数说明:** + +|参数名|类型|必填|说明| +|:-|:-|:-|:-| +|filePath|String|是|文件路径| +|success|Function|否|接口调用成功的回调函数,返回结果见 success 返回参数说明| +|fail|Function|否|接口调用失败的回调函数| +|complete|Function|否|接口调用结束的回调函数(调用成功、失败都会执行)| + +**success 返回参数说明:** + +|参数|类型|说明| +|:-|:-|:-| +|errMsg|String|接口调用结果| +|size|Number|文件大小,以字节为单位。| +|createTime|Number|文件保存时的时间戳,从 `1970/01/01 08:00:00` 到该时刻的秒数。| + +**示例代码:** + +```javascript +uni.getSavedFileInfo({ + filePath: 'unifile://somefile', //仅做示例用,非真正的文件路径 + success: function (res) { + console.log(res.size); + console.log(res.createTime); + } +}); +``` + +#### uni.removeSavedFile(OBJECT) +删除本地存储的文件。 + +**平台差异说明** + +|5+App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序| +|:-:|:-:|:-:|:-:|:-:|:-:| +|√|x|√|√|√|x| + +**OBJECT 参数说明:** + +|参数名|类型|必填|说明| +|:-|:-|:-|:-| +|filePath|String|是|需要删除的文件路径| +|success|Function|否|接口调用成功的回调函数| +|fail|Function|否|接口调用失败的回调函数| +|complete|Function|否|接口调用结束的回调函数(调用成功、失败都会执行)| + +**示例代码:** + +```javascript +uni.getSavedFileList({ + success: function (res) { + if (res.fileList.length > 0) { + uni.removeSavedFile({ + filePath: res.fileList[0].filePath, + complete: function (res) { + console.log(res); + } + }); + } + } +}); +``` + +#### uni.getFileInfo(OBJECT) +获取文件信息 + +**平台差异说明** + +|5+App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序| +|:-:|:-:|:-:|:-:|:-:|:-:| +|√|x|√|√|√|x| + +**OBJECT 参数说明:** + +|参数名|类型|默认值|必填|说明|平台差异说明| +|:-|:-|:-|:-|:-|:-| +|filePath|String||是|本地文件路径|| +|digestAlgorithm|String|md5|否|计算文件摘要的算法,可取值 md5、sha1。|微信小程序| +|success|Function||否|接口调用成功的回调函数|| +|fail|Function||否|接口调用失败的回调函数|| +|complete|Function||否|接口调用结束的回调函数(调用成功、失败都会执行)| | + +**success 返回参数说明:** + +|参数|类型|说明|平台差异说明| +|:-|:-|:-|:-| +|errMsg|String|接口调用结果|| +|size|Number|文件大小,以字节为单位。|| +|digest|String|按照传入的 digestAlgorithm 计算得出的的文件摘要|微信小程序| + +#### uni.openDocument(OBJECT) +新开页面打开文档,支持格式:doc, xls, ppt, pdf, docx, xlsx, pptx。 + +**平台差异说明** + +|5+App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序| +|:-:|:-:|:-:|:-:|:-:|:-:| +|√|x|√|√|√|x| + +**OBJECT 参数说明:** + +|参数名|类型|必填|说明|平台差异说明| +|:-|:-|:-|:-| +|filePath|String|是|文件路径,可通过 downFile 获得|| +|fileType|String|否|文件类型,指定文件类型打开文件,有效值 doc, xls, ppt, pdf, docx, xlsx, pptx|微信小程序| +|success|String|否|接口调用成功的回调函数|| +|fail|String|否|接口调用失败的回调函数|微信小程序| +|complete|String|否|接口调用结束的回调函数(调用成功、失败都会执行)| | + +**示例代码:** + +```javascript +uni.downloadFile({ + url: 'https://example.com/somefile.pdf', + success: function (res) { + var filePath = res.tempFilePath; + uni.openDocument({ + filePath: filePath, + success: function (res) { + console.log('打开文档成功'); + } + }); + } +}); +``` + +**平台差异** + +|平台|打开方式| +|:-|:-| +|小程序|在小程序的入口应用内打开| +|5+App iOS|在当前应用内打开| +|5+App Android|调用系统相关应用打开,无相关应用则不能打开| +|H5|使用浏览器打开,当前浏览器不支持则不能打开| + +**Tips** + +App端有更强大的plus.io API可用。[https://www.html5plus.org/doc/zh_cn/io.html](https://www.html5plus.org/doc/zh_cn/io.html) \ No newline at end of file diff --git a/docs/api/file/getFileSystemManager.md b/docs/api/file/getFileSystemManager.md new file mode 100644 index 0000000000000000000000000000000000000000..eab6e499821ce184aa40591bc7ac3ad322a6c1f3 --- /dev/null +++ b/docs/api/file/getFileSystemManager.md @@ -0,0 +1,6 @@ + +#### uni.getFileSystemManager() + +获取全局唯一的文件管理器 + +仅微信小程序平台支持,[规范详情](https://developers.weixin.qq.com/miniprogram/dev/api/wx.getFileSystemManager.html) \ No newline at end of file diff --git a/docs/api/key.md b/docs/api/key.md new file mode 100644 index 0000000000000000000000000000000000000000..68deba7c57b812791e3a73e3c71237203809b778 --- /dev/null +++ b/docs/api/key.md @@ -0,0 +1,10 @@ +#### uni.hideKeyboard() +隐藏软键盘 + +**平台差异说明** + +|5+App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序| +|:-:|:-:|:-:|:-:|:-:|:-:| +|√|√|√|√|x|x| + +隐藏已经显示的软键盘,如果软键盘没有显示则不做任何操作。 diff --git a/docs/api/lifetime.md b/docs/api/lifetime.md new file mode 100644 index 0000000000000000000000000000000000000000..70dddc415bb7d38397fbcf2eee6c543d4f2fb86d --- /dev/null +++ b/docs/api/lifetime.md @@ -0,0 +1,83 @@ +### 应用生命周期 + +``uni-app`` 支持如下应用生命周期函数: + +|函数名|说明| +|:-|:-| +|onLaunch|当``uni-app`` 初始化完成时触发(全局只触发一次)| +|onShow|当 ``uni-app`` 启动,或从后台进入前台显示| +|onHide|当 ``uni-app`` 从前台进入后台| +|onUniNViewMessage|对 ``nvue`` 页面发送的数据进行监听,可参考 [nvue 向 vue 通讯](/use-weex?id=nvue-向-vue-通讯)| + +**注意** + +- 应用生命周期仅可在``App.vue``中监听,在其它页面监听无效。 +- onlaunch里进行页面跳转,如遇白屏报错,请参考[https://ask.dcloud.net.cn/article/35942](https://ask.dcloud.net.cn/article/35942) + +### 页面生命周期 + +``uni-app`` 支持如下页面生命周期函数: + +|函数名|说明|平台差异说明|最低版本| +|:-|:-|:-|:-| +|onLoad|监听页面加载,其参数为上个页面传递的数据,参数类型为Object(用于页面传参),参考[示例](/api/router?id=navigateto)||| +|onShow|监听页面显示。页面每次出现在屏幕上都触发,包括从下级页面点返回露出当前页面||| +|onReady|监听页面初次渲染完成。注意如果渲染速度快,会在页面进入动画完成前触发||| +|onHide|监听页面隐藏||| +|onUnload|监听页面卸载||| +|onResize|监听窗口尺寸变化|5+App、微信小程序|| +|onPullDownRefresh|监听用户下拉动作,一般用于下拉刷新,参考[示例](api/ui/pulldown)||| +|onReachBottom|页面滚动到底部的事件(不是scroll-view滚到底),常用于下拉下一页数据。如使用scroll-view导致页面级没有滚动,则触底事件不会被触发||| +|onTabItemTap|点击 tab 时触发,参数为Object,具体见下方注意事项|微信小程序、百度小程序、H5、5+App(自定义组件模式)|| +|onShareAppMessage|用户点击右上角分享|微信小程序、百度小程序、头条小程序、支付宝小程序|| +|onPageScroll|监听页面滚动,参数为Object||| +|onNavigationBarButtonTap|监听原生标题栏按钮点击事件,参数为Object|5+ App、H5|| +|onBackPress|监听页面返回,返回 event = {from:backbutton、 navigateBack} ,backbutton 表示来源是左上角返回按钮或 android 返回键;navigateBack表示来源是 uni.navigateBack ;详细说明及使用:[onBackPress 详解](http://ask.dcloud.net.cn/article/35120)|5+App、H5|| +|onNavigationBarSearchInputChanged|监听原生标题栏搜索输入框输入内容变化事件|5+App、H5|1.6.0| +|onNavigationBarSearchInputConfirmed|监听原生标题栏搜索输入框搜索事件,用户点击软键盘上的“搜索”按钮时触发。|5+App、H5|1.6.0| +|onNavigationBarSearchInputClicked|监听原生标题栏搜索输入框点击事件|5+App、H5|1.6.0| + +``onPageScroll`` 参数说明: + +|属性|类型|说明| +|---|---|---| +|scrollTop|Number|页面在垂直方向已滚动的距离(单位px)| + +``onTabItemTap`` 参数说明: + +|属性|类型|说明| +|---|---|---| +|index|String|被点击tabItem的序号,从0开始| +|pagePath|String|被点击tabItem的页面路径| +|text|String|被点击tabItem的按钮文字| + +**注意** +- onTabItemTap常用于点击当前tabitem,滚动或刷新当前页面。如果是点击不同的tabitem,一定会触发页面切换。 +- 如果想在App端实现点击某个tabitem不跳转页面,不能使用onTabItemTap,可以使用[plus.nativeObj.view](http://www.html5plus.org/doc/zh_cn/nativeobj.html)放一个区块盖住原先的tabitem,并拦截点击事件。 +- onTabItemTap在App端,从HBuilderX 1.9 的自定义组件编译模式开始支持。 + +``onNavigationBarButtonTap`` 参数说明: + +|属性|类型|说明| +|---|---|---| +|index|Number|原生标题栏按钮数组的下标| + +`onBackPress` 回调参数对象说明: + +|属性|类型|说明| +|---|---|---| +|from|String|触发返回行为的来源:'backbutton'——左上角导航栏按钮及安卓返回键;'navigateBack'——uni.navigateBack() 方法。| +```javascript +export default { + data() { + return {}; + }, + onBackPress(options) { + console.log('from:' + options.from) + } +} +``` + +**注意** + +- nvue 页面支持的生命周期参考:[nvue 生命周期介绍](/use-weex?id=生命周期)。 \ No newline at end of file diff --git a/docs/api/location/location.md b/docs/api/location/location.md new file mode 100644 index 0000000000000000000000000000000000000000..b25acbc605dd132dcd035d7a7b04517ec9b4bc25 --- /dev/null +++ b/docs/api/location/location.md @@ -0,0 +1,114 @@ +### uni.getLocation(OBJECT) +获取当前的地理位置、速度。 +在微信小程序中,当用户离开应用后,此接口无法调用;当用户点击“显示在聊天顶部”时,此接口可继续调用。 + +**OBJECT 参数说明** + +|参数名|类型|必填|说明|平台差异说明| +|:-|:-|:-|:-|:-:| +|type|String|否|默认为 wgs84 返回 gps 坐标,gcj02 返回国测局坐标,可用于 ``uni.openLocation`` 的坐标|| +|altitude|Boolean|否|传入 true 会返回高度信息,由于获取高度需要较高精确度,会减慢接口返回速度|App和头条小程序不支持| +|geocode|Boolean|否|默认false,是否解析地址信息|仅App平台支持| +|success|Function|是|接口调用成功的回调函数,返回内容详见返回参数说明。|| +|fail|Function|否|接口调用失败的回调函数|| +|complete|Function|否|接口调用结束的回调函数(调用成功、失败都会执行)| | + +**success 返回参数说明** + +|参数|说明| +|:-|:-| +|latitude|纬度,浮点数,范围为-90~90,负数表示南纬| +|longitude|经度,浮点数,范围为-180~180,负数表示西经| +|speed|速度,浮点数,单位m/s| +|accuracy|位置的精确度| +|altitude|高度,单位 m| +|verticalAccuracy|垂直精度,单位 m(Android 无法获取,返回 0)| +|horizontalAccuracy|水平精度,单位 m| +|[address](/api/location/location?id=address)|地址信息| + +**address 地址信息说明** + +|属性|类型|描述|说明| +|:-|:-|:-|:-| +|country|String|国家|如“中国”,如果无法获取此信息则返回undefined| +|province|String|省份名称|如“北京市”,如果无法获取此信息则返回undefined| +|city|String|城市名称|如“北京市”,如果无法获取此信息则返回undefined| +|district|String|区(县)名称|如“朝阳区”,如果无法获取此信息则返回undefined| +|street|String|街道信息|如“酒仙桥路”,如果无法获取此信息则返回undefined| +|streetNum|String|获取街道门牌号信息|如“3号”,如果无法获取此信息则返回undefined| +|poiName|String|POI信息|如“电子城.国际电子总部”,如果无法获取此信息则返回undefined| +|postalCode|String|邮政编码|如“100016”,如果无法获取此信息则返回undefined| +|cityCode|String|城市代码|如“010”,如果无法获取此信息则返回undefined| + +**示例** + +```javascript +uni.getLocation({ + type: 'wgs84', + success: function (res) { + console.log('当前位置的经度:' + res.longitude); + console.log('当前位置的纬度:' + res.latitude); + } +}); +``` + +**注意** + +- H5:在较新的手机浏览器上,H5 端获取定位信息,要求部署在 **https** 服务上,本地预览(localhost)仍然可以使用 http 协议。 +- H5:无 GPS 模块的 PC 设备使用 Chrome 浏览器的时候,位置信息是连接谷歌服务器获取的,国内用户可能获取位置信息失败。 +- H5:微信公众号可使用微信js sdk,[详见](https://ask.dcloud.net.cn/article/35380) +- App:Android由于谷歌服务被墙,想在国产手机上正常定位,需要向高德等三方服务商申请SDK资质,获取AppKey。云打包时需要在manifest的SDK配置中填写Appkey。在manifest可视化界面有详细申请指南。离线打包自行在原生工程中配置。 +- App:```` 组件默认为国测局坐标gcj02,调用 ``uni.getLocation`` 返回结果传递给 ```` 组件时,需指定 type 为 gcj02。 +- App:持续定位方案:iOS端可以申请持续定位权限,[参考](https://ask.dcloud.net.cn/article/12569)。Android如果进程被杀,代码无法执行。可以使用[unipush](https://ask.dcloud.net.cn/article/35622),通过服务器激活App,执行透传消息,让App启动然后采集位置。Android上,即使自己写原生插件做后台进程,也很容易被杀,unipush是更合适的方案 +- 小程序:api默认不返回详细地址中文描述。需要中文地址有2种方式:1、使用高德地图小程序sdk,在app和微信上都可以获得中文地址,[参考](http://ask.dcloud.net.cn/article/35070)。2、只考虑app,使用``plus.geolocation``也可以获取中文地址 + +### uni.chooseLocation(OBJECT) +打开地图选择位置。 + +**平台差异说明** + +|5+App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序| +|:-:|:-:|:-:|:-:|:-:|:-:| +|√|√|√|√|√|x| + +**OBJECT 参数说明** + +|参数名|类型|必填|说明| +|:-|:-|:-|:-| +|keyword|String|否|搜索关键字,仅App平台支持| +|success|Function|是|接口调用成功的回调函数,返回内容详见返回参数说明。| +|fail|Function|否|接口调用失败的回调函数(获取定位失败、用户取消等情况下触发)| +|complete|Function|否|接口调用结束的回调函数(调用成功、失败都会执行)| + +**注意** +- keyword参数,HBuilderX 2.1.4 以后版本支持 +- 因平台差异,如果SDK配置百度地图,需要设置keyword,才能显示相关地点 + + +**success 返回参数说明** + +|参数|说明| +|:-|:-| +|name|位置名称| +|address|详细地址| +|latitude|纬度,浮点数,范围为-90~90,负数表示南纬| +|longitude|经度,浮点数,范围为-180~180,负数表示西经| + +**示例** + +```javascript +uni.chooseLocation({ + success: function (res) { + console.log('位置名称:' + res.name); + console.log('详细地址:' + res.address); + console.log('纬度:' + res.latitude); + console.log('经度:' + res.longitude); + } +}); +``` + +**注意** +- 不同端,使用地图选择时基于的底层地图引擎不一样,如微信小程序和H5是腾讯地图,App是高德地图,详见地图map组件的使用注意事项 +- 微信内置浏览器中可使用微信js sdk,[详见](https://ask.dcloud.net.cn/article/35380) +- chooseLocation属于封装型API,开发者若觉得不够灵活,可自行基于原始的map组件进行封装 +- HBuilderX 1.9.2的Android平台chooseLocation失效,请更新到更高版本。 \ No newline at end of file diff --git a/docs/api/location/map.md b/docs/api/location/map.md new file mode 100644 index 0000000000000000000000000000000000000000..95b46bcf0693320364a09f78a5f0c628a6d57d33 --- /dev/null +++ b/docs/api/location/map.md @@ -0,0 +1,82 @@ +### uni.createMapContext(mapId,this) +创建并返回 map 上下文 ``mapContext`` 对象。在自定义组件下,第二个参数传入组件实例this,以操作组件内 ```` 组件。 + +**平台差异说明** + +|5+App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序| +|:-:|:-:|:-:|:-:|:-:|:-:| +|√|√|√|√|√|x| + +mapContext + +``mapContext`` 通过 mapId 跟一个 ```` 组件绑定,通过它可以操作对应的 ```` 组件。 + +**mapContext 对象的方法列表** + +|方法|参数|说明|平台差异说明|最低版本| +|:-|:-|:-|:-|:-| +|getCenterLocation|OBJECT|获取当前地图中心的经纬度,返回的是 gcj02 坐标系,可以用于 [uni.openLocation](api/location/location?id=getlocation)||| +|moveToLocation||将地图中心移动到当前定位点,需要配合map组件的show-location使用||| +|translateMarker|OBJECT|平移marker,带动画||| +|includePoints|OBJECT|缩放视野展示所有经纬度||| +|getRegion|OBJECT|获取当前地图的视野范围||| +|getScale|OBJECT|获取当前地图的缩放级别||| +|$getAppMap||获取原生地图对象 [plus.maps.Map](https://www.html5plus.org/doc/zh_cn/maps.html#plus.maps.Map)|5+App自定义组件模式|1.9.3| + +`$getAppMap()` 注意事项: + +- 在页面中,必须在 `onReady` 中调用。 +- 在组件中,必须在 `mounted` 中调用。 +- `uni-app`中使用原生地图无需提供占位div,得到`$getAppMap()`后直接js使用即可。 + +**getCenterLocation 的 OBJECT 参数列表** + +|参数|类型|必填|说明| +|:-|:-|:-|:-| +|success|Function|否|接口调用成功的回调函数 ,res = { longitude: "经度", latitude: "纬度"}| +|fail|Function|否|接口调用失败的回调函数| +|complete|Function|否|接口调用结束的回调函数(调用成功、失败都会执行)| + +**translateMarker 的 OBJECT 参数列表** + +|参数|类型|必填|说明| +|:-|:-|:-|:-| +|markerId|Number|是|指定 marker| +|destination|Object|是|指定 marker 移动到的目标点| +|autoRotate|Boolean|是|移动过程中是否自动旋转 marker| +|rotate|Number|是|marker 的旋转角度| +|duration|Number|否|动画持续时长,默认值1000ms,平移与旋转分别计算| +|animationEnd|Function|否| 动画结束回调函数| +|fail|Function|否| 接口调用失败的回调函数| + +**includePoints 的 OBJECT 参数列表** + +|参数|类型|必填|说明| +|:-|:-|:-|:-| +|points|Array|是|要显示在可视区域内的坐标点列表,[{latitude, longitude}]| +|padding|Array|否|坐标点形成的矩形边缘到地图边缘的距离,单位像素。格式为[上,右,下,左],安卓上只能识别数组第一项,上下左右的padding一致。开发者工具暂不支持padding参数。| + +**getRegion 的 OBJECT 参数列表** + +|参数|类型|必填|说明| +|:-|:-|:-|:-| +|success|Function|否|接口调用成功的回调函数,res = {southwest, northeast},西南角与东北角的经纬度| +|fail|Function|否|接口调用失败的回调函数| +|complete|Function|否|接口调用结束的回调函数(调用成功、失败都会执行)| + +**getScale 的 OBJECT 参数列表** + +|参数|类型|必填|说明| +|:-|:-|:-|:-| +|success|Function|否|接口调用成功的回调函数,res = {scale}| +|fail|Function|否|接口调用失败的回调函数| +|complete|Function|否|接口调用结束的回调函数(调用成功、失败都会执行)| + + +**Tips** + +- 如果想在App端实现更多地图功能,可通过`$getAppMap()`获取原生地图对象`plus.maps.Map`,然后参考[文档](https://www.html5plus.org/doc/zh_cn/maps.html#plus.maps.Map)实现更多功能。 +- H5 端获取定位信息,需要部署在 **https** 服务上,本地预览(localhost)仍然可以使用 http 协议。 +- 无 GPS 模块的 PC 设备使用 Chrome 浏览器的时候,位置信息是连接谷歌服务器获取的,国内用户可能获取位置信息失败。 +- App 端使用地图组件需要向高德或百度等三方服务商申请SDK资质,获取AppKey,打包时需要在manifest的SDK配置中填写Appkey。在manifest可视化界面有详细申请指南。 +- ```` 组件默认为国测局坐标,调用 ``uni.getLocation`` 返回结果传递给 ```` 组件时,需指定 type 为 gcj02。 diff --git a/docs/api/location/open-location.md b/docs/api/location/open-location.md new file mode 100644 index 0000000000000000000000000000000000000000..ad01b923d3e88530524cf526ba40268aeb7ec998 --- /dev/null +++ b/docs/api/location/open-location.md @@ -0,0 +1,60 @@ +### uni.openLocation(OBJECT) +使用应用内置地图查看位置。 + +**OBJECT 参数说明** + +|参数名|类型|必填|说明|平台差异说明| +|:-|:-|:-|:-|:-| +|latitude|Float|是|纬度,范围为-90~90,负数表示南纬,使用 gcj02 国测局坐标系|| +|longitude|Float|是|经度,范围为-180~180,负数表示西经,使用 gcj02 国测局坐标系|| +|scale|Int|否|缩放比例,范围5~18,默认为18|微信小程序| +|name|String|否|位置名|| +|address|String|否|地址的详细说明|| +|success|Function|否|接口调用成功的回调函数|| +|fail|Function|否|接口调用失败的回调函数|| +|complete|Function|否|接口调用结束的回调函数(调用成功、失败都会执行)| | + +**示例** + +```javascript +uni.getLocation({ + type: 'gcj02', //返回可以用于uni.openLocation的经纬度 + success: function (res) { + const latitude = res.latitude; + const longitude = res.longitude; + uni.openLocation({ + latitude: latitude, + longitude: longitude, + success: function () { + console.log('success'); + } + }); + } +}); +``` + +**Tips** + +- 本API是一个非原子的封装界面,开发者如有定制需求,可自己做页面实现类似功能。 +- H5 端获取定位信息,需要部署在 **https** 服务上,本地预览(localhost)仍然可以使用 http 协议。 +- 无 GPS 模块的 PC 设备使用 Chrome 浏览器的时候,位置信息是连接谷歌服务器获取的,国内用户可能获取位置信息失败。 +- ```` 组件默认为国测局坐标,调用 ``uni.getLocation`` 返回结果传递给 ```` 组件时,需指定 type 为 gcj02。 +- App 端使用地图组件需要向高德或百度等三方服务商申请SDK资质,获取AppKey,打包时需要在manifest的SDK配置中填写Appkey。在manifest可视化界面有详细申请指南。 +- iOS端 如需使用第三方地图进行导航,需要在 manifest.json 文件内增加 ``urlschemewhitelist`` 节点,在线打包即可 +```json +{ + "app-plus": { + "distribute": { + "ios": { + "urlschemewhitelist": [ + "baidumap", + "iosamap", + "qqmap" + ] + } + } + } +} +``` + +- 点击返回也会进入 `fail` 回调中 \ No newline at end of file diff --git a/docs/api/log.md b/docs/api/log.md new file mode 100644 index 0000000000000000000000000000000000000000..80b65384c36d117749cb84b9793304b83d117a43 --- /dev/null +++ b/docs/api/log.md @@ -0,0 +1,20 @@ +## console +向控制台打印日志信息。 +### debug +向控制台打印 debug 日志 + +注:App 端自定义组件模式下,debug 方法等同于 log 方法。 +### log +向控制台打印 log 日志 +### info +向控制台打印 info 日志 +### warn +向控制台打印 warn 日志 +### error +向控制台打印 error 日志 + +注意: + +- 不同平台对于 console 方法的支持存在差异,建议在开发过程中只使用文档中提到的方法。 +- HBuilderX中有2个重要的代码块,敲`clog`:可直接输出`console.log()`;敲`clogv`:可输出`console.log(": " + );`,并且出现双光标,方便把变量名称和值同时打印出来。 +- HBuilderX 1.9.7 以上的自定义组件模式,支持打印对象信息到控制台。老版本可使用`clogj`代码块将json对象转为字符串打印出来。 \ No newline at end of file diff --git a/docs/api/media/audio-context.md b/docs/api/media/audio-context.md new file mode 100644 index 0000000000000000000000000000000000000000..7b38c744ad398b5235891ad4c0b0886168fce66e --- /dev/null +++ b/docs/api/media/audio-context.md @@ -0,0 +1,97 @@ +### uni.createInnerAudioContext() +创建并返回内部 audio 上下文 `innerAudioContext` 对象。 + +**平台差异说明** + +|5+App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序| +|:-:|:-:|:-:|:-:|:-:|:-:| +|√|√|√|x|√|√| + +**innerAudioContext 对象的属性列表** + +|属性|类型|说明|只读|平台差异说明| +|:-|:-|:-|:-|:-| +|src|String|音频的数据链接,用于直接播放。|否|| +|startTime|Number|开始播放的位置(单位:s),默认 0|否|| +|autoplay|Boolean|是否自动开始播放,默认 false|否|| +|loop|Boolean|是否循环播放,默认 false|否|| +|obeyMuteSwitch|Boolean|是否遵循系统静音开关,当此参数为 false 时,即使用户打开了静音开关,也能继续发出声音,默认值 true|否|微信小程序、百度小程序、头条小程序| +|duration|Number|当前音频的长度(单位:s),只有在当前有合法的 src 时返回|是|| +|currentTime|Number|当前音频的播放位置(单位:s),只有在当前有合法的 src 时返回,时间不取整,保留小数点后 6 位|是|| +|paused|Boolean|当前是是否暂停或停止状态,true 表示暂停或停止,false 表示正在播放|是|| +|buffered|Number|音频缓冲的时间点,仅保证当前播放时间点到此时间点内容已缓冲。|是|| +|volume|Number|音量。范围 0~1。|否| | + + +**innerAudioContext 对象的方法列表** + +|方法|参数|说明| +|:-|:-|:-| +|play||播放| +|pause||暂停| +|stop||停止| +|seek|position|跳转到指定位置,单位 s| +|destroy||销毁当前实例| +|onCanplay|callback|音频进入可以播放状态,但不保证后面可以流畅播放| +|onPlay|callback|音频播放事件| +|onPause|callback|音频暂停事件| +|onStop|callback|音频停止事件| +|onEnded|callback|音频自然播放结束事件| +|onTimeUpdate|callback|音频播放进度更新事件| +|onError|callback|音频播放错误事件| +|onWaiting|callback|音频加载中事件,当音频因为数据不足,需要停下来加载时会触发| +|onSeeking|callback|音频进行 seek 操作事件| +|onSeeked|callback|音频完成 seek 操作事件| +|offCanplay|callback|取消监听 onCanplay 事件| +|offPlay|callback|取消监听 onPlay 事件| +|offPause|callback|取消监听 onPause 事件| +|offStop|callback|取消监听 onStop 事件| +|offEnded|callback|取消监听 onEnded 事件| +|offTimeUpdate|callback|取消监听 onTimeUpdate 事件| +|offError|callback|取消监听 onError 事件| +|offWaiting|callback|取消监听 onWaiting 事件| +|offSeeking|callback|取消监听 onSeeking 事件| +|offSeeked|callback|取消监听 onSeeked 事件| + +errCode 说明 + +|errCode|说明| +|:-|:-| +|10001|系统错误| +|10002|网络错误| +|10003|文件错误| +|10004|格式错误| +|-1|未知错误| + + +**支持格式** + +|格式|iOS|Android| +|:-|:-|:-| +|flac |x|√| +|m4a |√|√| +|ogg |x|√| +|ape |x|√| +|amr |x|√| +|wma |x|√| +|wav |√|√| +|mp3 |√|√| +|mp4 |x|√| +|aac |√|√| +|aiff |√|x| +|caf |√|x| + +**示例** + +```javascript +const innerAudioContext = uni.createInnerAudioContext(); +innerAudioContext.autoplay = true; +innerAudioContext.src = 'https://img-cdn-qiniu.dcloud.net.cn/uniapp/audio/music.mp3'; +innerAudioContext.onPlay(() => { + console.log('开始播放'); +}); +innerAudioContext.onError((res) => { + console.log(res.errMsg); + console.log(res.errCode); +}); +``` \ No newline at end of file diff --git a/docs/api/media/background-audio-manager.md b/docs/api/media/background-audio-manager.md new file mode 100644 index 0000000000000000000000000000000000000000..261f5ab02df58c0f202d2678ab3b6e70960b70c8 --- /dev/null +++ b/docs/api/media/background-audio-manager.md @@ -0,0 +1,69 @@ +### uni.getBackgroundAudioManager() +获取**全局唯一**的背景音频管理器 ``backgroundAudioManager``。 + +**平台差异说明** + +|5+App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序| +|:-:|:-:|:-:|:-:|:-:|:-:| +|√|x|√|x|√|x| + +**backgroundAudioManager 对象的属性列表** + +|属性|类型|说明|只读| +|:-|:-|:-|:-| +|duration|Number|当前音频的长度(单位:s),只有在当前有合法的 src 时返回|是| +|currentTime|Number|当前音频的播放位置(单位:s),只有在当前有合法的 src 时返回|是| +|paused|Boolean|当前是是否暂停或停止状态,true 表示暂停或停止,false 表示正在播放|是| +|src|String|音频的数据源,默认为空字符串,**当设置了新的 src 时,会自动开始播放,**目前支持的格式有 m4a, aac, mp3, wav|否| +|startTime|Number|音频开始播放的位置(单位:s)|否| +|buffered|Number|音频缓冲的时间点,仅保证当前播放时间点到此时间点内容已缓冲。|是| +|title|String|音频标题,用于做原生音频播放器音频标题。原生音频播放器中的分享功能,分享出去的卡片标题,也将使用该值。|否| +|epname|String|专辑名,原生音频播放器中的分享功能,分享出去的卡片简介,也将使用该值。|否| +|singer|String|歌手名,原生音频播放器中的分享功能,分享出去的卡片简介,也将使用该值。|否| +|coverImgUrl|String|封面图url,用于做原生音频播放器背景图。原生音频播放器中的分享功能,分享出去的卡片配图及背景也将使用该图。|否| +|webUrl|String|页面链接,原生音频播放器中的分享功能,分享出去的卡片简介,也将使用该值。|否| +|protocol|String|音频协议。默认值为 'http',设置 'hls' 可以支持播放 HLS 协议的直播音频|否| + +**backgroundAudioManager 对象的方法列表** + +|方法|参数|说明| +|:-|:-|:-| +|play||播放| +|pause||暂停| +|stop||停止| +|seek|position|跳转到指定位置,单位 s| +|onCanplay|callback|背景音频进入可以播放状态,但不保证后面可以流畅播放| +|onPlay|callback|背景音频播放事件| +|onPause|callback|背景音频暂停事件| +|onStop|callback|背景音频停止事件| +|onEnded|callback|背景音频自然播放结束事件| +|onTimeUpdate|callback|背景音频播放进度更新事件| +|onPrev|callback|用户在系统音乐播放面板点击上一曲事件(iOS only)| +|onNext|callback|用户在系统音乐播放面板点击下一曲事件(iOS only)| +|onError|callback|背景音频播放错误事件| +|onWaiting|callback|音频加载中事件,当音频因为数据不足,需要停下来加载时会触发| + +errCode 说明 + +|errCode|说明| +|:-|:-| +|10001|系统错误| +|10002|网络错误| +|10003|文件错误| +|10004|格式错误| +|-1|未知错误| + +**示例** + +```javascript +const bgAudioMannager = uni.getBackgroundAudioManager(); +bgAudioMannager.title = '致爱丽丝'; +bgAudioMannager.singer = '暂无'; +bgAudioMannager.coverImgUrl = 'https://img-cdn-qiniu.dcloud.net.cn/uniapp/audio/music.jpg'; +bgAudioMannager.src = 'https://img-cdn-qiniu.dcloud.net.cn/uniapp/audio/music.mp3'; +``` + + +Tips: + +* ios应用背景播放需在manifest.json -> app-plus -> distribute -> ios 节点添加 ``"UIBackgroundModes":["audio"]`` 才能保证音乐可以后台播放(打包成ipa生效)。 \ No newline at end of file diff --git a/docs/api/media/camera-context.md b/docs/api/media/camera-context.md new file mode 100644 index 0000000000000000000000000000000000000000..32707ce182bd07e6f3b41719e492e23f7d211f35 --- /dev/null +++ b/docs/api/media/camera-context.md @@ -0,0 +1,47 @@ +### uni.createCameraContext() +创建并返回 camera 上下文 cameraContext 对象。 + +**平台差异说明** + +|5+App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序| +|:-:|:-:|:-:|:-:|:-:|:-:| +|x|x|√|x|√|x| + +**cameraContext 对象的方法列表** + +|方法|参数|说明| +|:-|:-|:-| +|takePhoto|Object|拍照,可指定质量,成功则返回图片路径。| +|startRecord|Object|开始录像| +|stopRecord|Object|结束录像,成功则返回封面与视频。| +|onCameraFrame|Function|获取 Camera 实时帧数据。仅`微信小程序平台`支持,[规范详情](https://developers.weixin.qq.com/miniprogram/dev/api/CameraContext.onCameraFrame.html)| + +**takePhoto 的 Object 参数列表:** + +|参数|类型|必填|说明| +|:-|:-|:-|:-| +|quality|String|否|成像质量,值为high(高质量)、normal(普通质量)、low(低质量),默认normal。| +|success|Function|否|接口调用成功的回调函数 ,返回照片文件的临时路径,res = { tempImagePath }。| +|fail|Function|否|接口调用失败的回调函数| +|complete|Function|否|接口调用结束的回调函数(调用成功、失败都会执行)| + +**startRecord 的 Object 参数列表:** + +|参数|类型|必填|说明| +|:-|:-|:-|:-| +|success|Function|否|接口调用成功的回调函数| +|fail|Function|否|接口调用失败的回调函数| +|complete|Function|否|接口调用结束的回调函数(调用成功、失败都会执行)| + +**stopRecord 的 Object 参数列表:** + +|参数|类型|必填|说明| +|:-|:-|:-|:-| +|success|Function|否|接口调用成功的回调函数 ,返回封面与视频的临时路径,res = { tempThumbPath, tempVideoPath }。| +|fail|Function|否|接口调用失败的回调函数| +|complete|Function|否|接口调用结束的回调函数(调用成功、失败都会执行)| + +**注意** + +- App下实现OCR等证件识别等需求,可在插件市场获取原生插件,[https://ext.dcloud.net.cn/plugin?id=135](https://ext.dcloud.net.cn/plugin?id=135) +- 微信小程序下实现OCR等证件识别等需求,插件市场也有封装,搜索 [ocr](https://ext.dcloud.net.cn/search?q=ocr) 可见。 \ No newline at end of file diff --git a/docs/api/media/editor-context.md b/docs/api/media/editor-context.md new file mode 100644 index 0000000000000000000000000000000000000000..3f79b8bad2a833b9879514d113ab3502883ddd55 --- /dev/null +++ b/docs/api/media/editor-context.md @@ -0,0 +1,161 @@ +## editorContext + +editorContext 实例,可通过 [uni.createSelectorQuery](/api/ui/nodes-info?id=createselectorquery) 获取。 + +`editorContext` 通过 `id` 跟一个 [``](/component/editor) 组件绑定,操作对应的 [``](/component/editor) 组件。 + +**平台差异说明** + +|5+App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序| +|:-:|:-:|:-:|:-:|:-:|:-:| +|√|x|√|x|x|x| + + +## editorContext.format(name, value) + +修改样式 + +| 参数 | 类型 | 说明 | +| --- | --- | --- | +|name|String|属性| +|value|String|值| + +**支持设置的样式列表** + +| name | value | +| --- | --- | +| bold | | +| italic | | +| underline | | +| strike | | +| ins | | +| script | sub / super | +| header | H1 / H2 / h3 / H4 / h5 / H6 | +| align | left / center / right / justify | +| direction | rtl | +| indent | -1 / +1 | +| list | ordered / bullet / check | +| color | hex color | +| backgroundColor | hex color | +| margin/marginTop/marginBottom/marginLeft/marginRight | css style | +| padding/paddingTop/paddingBottom/paddingLeft/paddingRight | css style | +| font/fontSize/fontStyle/fontVariant/fontWeight/fontFamily | css style | +| lineHeight | css style | +| letterSpacing | css style | +| textDecoration | css style | + +对已经应用样式的选区设置会取消样式。css style 表示 css 中规定的允许值。 + +## editorContext.insertDivider(OBJECT) + +插入分割线 + +**OBJECT 参数说明** + +| 属性 | 类型 | 默认值 | 必填 | 说明 | +| --- | --- | --- | --- | --- | +| success | Function | | 否 | 接口调用成功的回调函数 | +| fail | Function | | 否 | 接口调用失败的回调函数 | +| complete | Function | | 否 | 接口调用结束的回调函数(调用成功、失败都会执行) | + +## editorContext.insertImage(OBJECT) + +插入图片 + +**OBJECT 参数说明** + +| 属性 | 类型 | 默认值 | 必填 | 说明 | +| --- | --- | --- | --- | --- | +| src | String | | 是 | 图片地址 | +| alt | String | | 否 | 图像无法显示时的替代文本 | +| data | Object | | 否 | data 被序列化为 name=value;name1=value2 的格式挂在属性 data-custom 上 | +| success | Function | | 否 | 接口调用成功的回调函数 | +| fail | Function | | 否 | 接口调用失败的回调函数 | +| complete | Function | | 否 | 接口调用结束的回调函数(调用成功、失败都会执行) | + +## editorContext.insertText(OBJECT) + +覆盖当前选区,设置一段文本 + +**OBJECT 参数说明** + +| 属性 | 类型 | 默认值 | 必填 | 说明 | +| --- | --- | --- | --- | --- | +| text | String | | 否 | 文本内容 | +| success | Function | | 否 | 接口调用成功的回调函数 | +| fail | Function | | 否 | 接口调用失败的回调函数 | +| complete | Function | | 否 | 接口调用结束的回调函数(调用成功、失败都会执行) | + +# editorContext.setContents(OBJECT) + +初始化编辑器内容,hmlt和delta同时存在时仅delta生效 + +**OBJECT 参数说明** + +| 属性 | 类型 | 默认值 | 必填 | 说明 | +| --- | --- | --- | --- | --- | +| html | String | | 否 | 带标签的HTML内容 | +| delta | Object | | 否 | 表示内容的delta对象 | +| success | Function | | 否 | 接口调用成功的回调函数 | +| fail | Function | | 否 | 接口调用失败的回调函数 | +| complete | Function | | 否 | 接口调用结束的回调函数(调用成功、失败都会执行) | + +## editorContext.getContents(OBJECT) + +获取编辑器内容 + +**OBJECT 参数说明** + +| 属性 | 类型 | 默认值 | 必填 | 说明 | +| --- | --- | --- | --- | --- | +| success | Function | | 否 | 接口调用成功的回调函数 | +| fail | Function | | 否 | 接口调用失败的回调函数 | +| complete | Function | | 否 | 接口调用结束的回调函数(调用成功、失败都会执行) | + +## editorContext.clear(OBJECT) + +清空编辑器内容 + +**OBJECT 参数说明** + +| 属性 | 类型 | 默认值 | 必填 | 说明 | +| --- | --- | --- | --- | --- | +| success | Function | | 否 | 接口调用成功的回调函数 | +| fail | Function | | 否 | 接口调用失败的回调函数 | +| complete | Function | | 否 | 接口调用结束的回调函数(调用成功、失败都会执行) | + +## editorContext.removeFormat(OBJECT) + +清除当前选区的样式 + +**OBJECT 参数说明** + +| 属性 | 类型 | 默认值 | 必填 | 说明 | +| --- | --- | --- | --- | --- | +| success | Function | | 否 | 接口调用成功的回调函数 | +| fail | Function | | 否 | 接口调用失败的回调函数 | +| complete | Function | | 否 | 接口调用结束的回调函数(调用成功、失败都会执行) | + +## editorContext.undo(OBJECT) + +撤销 + +**OBJECT 参数说明** + +| 属性 | 类型 | 默认值 | 必填 | 说明 | +| --- | --- | --- | --- | --- | +| success | Function | | 否 | 接口调用成功的回调函数 | +| fail | Function | | 否 | 接口调用失败的回调函数 | +| complete | Function | | 否 | 接口调用结束的回调函数(调用成功、失败都会执行) | + +## editorContext.redo(OBJECT) + +恢复 + +**OBJECT 参数说明** + +| 属性 | 类型 | 默认值 | 必填 | 说明 | +| --- | --- | --- | --- | --- | +| success | Function | | 否 | 接口调用成功的回调函数 | +| fail | Function | | 否 | 接口调用失败的回调函数 | +| complete | Function | | 否 | 接口调用结束的回调函数(调用成功、失败都会执行) | \ No newline at end of file diff --git a/docs/api/media/image.md b/docs/api/media/image.md new file mode 100644 index 0000000000000000000000000000000000000000..291e834d3a1cb5006084888fb3c0f04f876bbd35 --- /dev/null +++ b/docs/api/media/image.md @@ -0,0 +1,274 @@ +### uni.chooseImage(OBJECT) +从本地相册选择图片或使用相机拍照。另外选择和上传非图像、视频文件参考:[https://ask.dcloud.net.cn/article/35547](https://ask.dcloud.net.cn/article/35547)。 + +**OBJECT 参数说明** + +|参数名|类型|必填|说明|平台差异说明| +|:-|:-|:-|:-|:-| +|count|Number|否|最多可以选择的图片张数,默认9|见下方说明| +|sizeType|Array<String>|否|original 原图,compressed 压缩图,默认二者都有|5+App、微信小程序、支付宝小程序、百度小程序| +|sourceType|Array<String>|否|album 从相册选图,camera 使用相机,默认二者都有。如需直接开相机或直接选相册,请只使用一个选项|| +|success|Function|是|成功则返回图片的本地文件路径列表 tempFilePaths|| +|fail|Function|否|接口调用失败的回调函数|小程序、5+App| +|complete|Function|否|接口调用结束的回调函数(调用成功、失败都会执行)| | + +**Tips** + +- count 值在 H5 平台的表现,基于浏览器本身的规范。目前测试的结果来看,只能限制单选/多选,并不能限制数量。并且,在实际的手机浏览器很少有能够支持多选的。 + +**注:文件的临时路径,在应用本次启动期间可以正常使用,如需持久保存,需在主动调用 [uni.saveFile](api/file/file?id=savefile),在应用下次启动时才能访问得到。** + +**success 返回参数说明** + +|参数|类型|说明| +|:-|:-|:-| +|tempFilePaths|Array<String>|图片的本地文件路径列表| +|tempFiles|Array<Object>|图片的本地文件列表,每一项是一个 File 对象| + +**File 对象结构如下** + +|参数|类型|说明| +|:-|:-|:-| +|path|String|本地文件路径| +|size|Number|本地文件大小,单位:B| + +**示例** + +```javascript +uni.chooseImage({ + count: 6, //默认9 + sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有 + sourceType: ['album'], //从相册选择 + success: function (res) { + console.log(JSON.stringify(res.tempFilePaths)); + } +}); +``` + +### uni.previewImage(OBJECT) @unipreviewimageobject +预览图片。 + +**OBJECT 参数说明** + +|参数名|类型|必填|说明|平台差异说明| +|:-|:-|:-|:-|:-| +|current|String/Number|详见下方说明|详见下方说明|| +|urls|Array<String>|是|需要预览的图片链接列表|| +|indicator|String|否|图片指示器样式,可取值:"default" - 底部圆点指示器; "number" - 顶部数字指示器; "none" - 不显示指示器。|5+App| +|loop|Boolean|否|是否可循环预览,默认值为 false|5+App| +|longPressActions|Object|否|长按图片显示操作菜单,如不填默认为**保存相册**,1.9.5 起支持。|5+App| +|success|Function|否|接口调用成功的回调函数|| +|fail|Function|否|接口调用失败的回调函数|| +|complete|Function|否|接口调用结束的回调函数(调用成功、失败都会执行)| | + +**current 参数说明** + +> 1.9.5+ 支持传图片在 urls 中的索引值 + +current 为当前显示图片的链接/索引值,不填或填写的值无效则为 urls 的第一张。**App平台在 1.9.5至1.9.8之间,current为必填。不填会报错** + +注意,当 urls 中有重复的图片链接时: + +- 传链接,预览结果始终显示该链接在 urls 中第一次出现的位置。 +- 传索引值,在微信/百度/头条小程序平台,会过滤掉传入的 urls 中该索引值之前与其对应图片链接重复的值。其它平台会保留原始的 urls 不会做去重处理。 + +举例说明: + +一组图片 `[A, B1, C, B2, D]`,其中 B1 与 B2 的图片链接是一样的。 + +- 传 B2 的链接,预览的结果是 B1,前一张是 A,下一张是 C。 +- 传 B2 的索引值 3,预览的结果是 B2,前一张是 C,下一张是 D。此时在微信/百度/头条小程序平台,最终传入的 urls 是 `[A, C, B2, D]`,过滤掉了与 B2 重复的 B1。 + +**longPressActions 参数说明** + +|参数|类型|必填|说明| +|:-|:-|:-|:-| +|itemList|Array<String>|是|按钮的文字数组| +|itemColor|String|否|按钮的文字颜色,字符串格式,默认为"#000000"| +|success|Function|否|接口调用成功的回调函数,详见返回参数说明| +|fail|Function|否|接口调用失败的回调函数| +|complete|Function|否|接口调用结束的回调函数(调用成功、失败都会执行)| + +**success 返回参数说明** + +|参数|类型|说明| +|:-|:-|:-| +|index|Number|用户长按图片的索引值| +|tapIndex|Number|用户点击按钮列表的索引值| + +**示例** + +```javascript +// 从相册选择6张图 +uni.chooseImage({ + count: 6, + sizeType: ['original', 'compressed'], + sourceType: ['album'], + success: function(res) { + // 预览图片 + uni.previewImage({ + urls: res.tempFilePaths, + longPressActions: { + itemList: ['发送给朋友', '保存图片', '收藏'], + success: function(data) { + console.log('选中了第' + (data.tapIndex + 1) + '个按钮,第' + (data.index + 1) + '张图片'); + }, + fail: function(err) { + console.log(err.errMsg); + } + } + }); + } + }); +``` + +### uni.getImageInfo(OBJECT) + +获取图片信息。 + +**平台差异说明** + +|5+App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序| +|:-:|:-:|:-:|:-:|:-:|:-:| +|√|√|√|√|√|x| + +**OBJECT 参数说明** + +|参数名|类型|必填|说明| +|:-|:-|:-|:-| +|src|String|是|图片的路径,可以是相对路径,临时文件路径,存储文件路径,网络图片路径| +|success|Function|否|接口调用成功的回调函数| +|fail|Function|否|接口调用失败的回调函数| +|complete|Function|否|接口调用结束的回调函数(调用成功、失败都会执行)| + +**success 返回参数说明** + +|参数名|类型|说明|平台差异说明| +|:-|:-|:-|:-| +|width|Number|图片宽度,单位px|| +|height|Number|图片高度,单位px|| +|path|String|返回图片的本地路径|| +|orientation|String|返回图片的方向,有效值见下表|小程序| +|type|String|返回图片的格式|小程序| + +**orientation 参数说明** + +|枚举值|说明| +|:-|:-| +|up|默认| +|down|180度旋转| +|left|逆时针旋转90度| +|right|顺时针旋转90度| +|up-mirrored|同up,但水平翻转| +|down-mirrored|同down,但水平翻转| +|left-mirrored|同left,但垂直翻转| +|right-mirrored|同right,但垂直翻转| + +**示例** + +```javascript +uni.chooseImage({ + count: 1, + sourceType: ['album'], + success: function (res) { + uni.getImageInfo({ + src: res.tempFilePaths[0], + success: function (image) { + console.log(image.width); + console.log(image.height); + } + }); + } +}); +``` + +### uni.saveImageToPhotosAlbum(OBJECT) +保存图片到系统相册。 + +**平台差异说明** + +|5+App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序 +|:-:|:-:|:-:|:-:|:-:|:-:| +|√|x|√|x|√|√| + +**OBJECT 参数说明** + +|参数名|类型|必填|说明| +|:-|:-|:-|:-| +|filePath|String|是|图片文件路径,可以是临时文件路径也可以是永久文件路径,不支持网络图片路径| +|success|Function|否|接口调用成功的回调函数| +|fail|Function|否|接口调用失败的回调函数| +|complete|Function|否|接口调用结束的回调函数(调用成功、失败都会执行)| + +**success 返回参数说明** + +|参数名|类型|说明| +|:-|:-|:-| +|errMsg|String|调用结果| + +**示例代码:** + +```javascript +uni.chooseImage({ + count: 1, + sourceType: ['camera'], + success: function (res) { + uni.saveImageToPhotosAlbum({ + filePath: res.tempFilePaths[0], + success: function () { + console.log('save success'); + } + }); + } +}); +``` + +# uni.compressImage(OBJECT) + +压缩图片接口,可选压缩质量 + +**平台差异说明** + +|5+App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序 +|:-:|:-:|:-:|:-:|:-:|:-:| +|1.9.7+ [自定义组件编译模式](https://ask.dcloud.net.cn/article/35843)|x|√|√|x|x| + +**OBJECT 参数说明** + +| 属性 | 类型 | 默认值 | 必填 | 说明 | +| :- | :- | :- | :- | :- | +| src | String | | 是 | 图片路径,图片的路径,可以是相对路径、临时文件路径、存储文件路径 | +| quality | Number | 80 | 否 | 压缩质量,范围0~100,数值越小,质量越低,压缩率越高(仅对jpg有效) | +| success | Function | | 否 | 接口调用成功的回调函数 | +| fail | Function | | 否 | 接口调用失败的回调函数 | +| complete | Function | | 否 | 接口调用结束的回调函数(调用成功、失败都会执行) | + +**success 返回参数说明** + +| 属性 | 类型 | 说明 | +| :- | :- | :- | +| tempFilePath | String | 压缩后图片的临时文件路径 | + +**示例代码:** + +```js +uni.compressImage({ + src: '/static/logo.jpg', + quality: 80, + success: res => { + console.log(res.tempFilePath) + } +}) +``` + + +# wx.chooseMessageFile(OBJECT) + +从客户端会话选择文件。 + +**平台差异说明** + +|5+App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序| +|:-:|:-:|:-:|:-:|:-:|:-:| +|x|x|√|x|x|x| + diff --git a/docs/api/media/live-player-context.md b/docs/api/media/live-player-context.md new file mode 100644 index 0000000000000000000000000000000000000000..ec2280173c9e126a24b0e9f0276bb16984414224 --- /dev/null +++ b/docs/api/media/live-player-context.md @@ -0,0 +1,46 @@ +### uni.createLivePlayerContext(livePlayerId, this) +创建 live-player 上下文 livePlayerContext 对象。 + +**平台差异说明** + +|5+App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序| +|:-:|:-:|:-:|:-:|:-:|:-:| +|见下|x|√|x|√|x| + +App平台的直播,不使用此API,而使用`plus.video.createLivePusher`,[详见](https://ask.dcloud.net.cn/article/13416) + +**参数说明** + +|参数|说明|平台差异说明| +|:-:|:-:|:-:| +|livePlayerId|```` 组件 id|| +|this|在自定义组件下,当前组件实例的 this,以操作组件内 ```` 组件|微信小程序| + +**livePlayerContext 对象的方法列表:** + +|方法|参数|说明| +|:-|:-|:-| +|play|Object|播放| +|stop|Object|停止| +|mute|Object|静音| +|pause|Object|暂停| +|resume|Object|恢复| +|requestFullScreen|Object|进入全屏| +|exitFullScreen|Object|退出全屏| + +**requestFullScreen 的 Object 参数列表:** + +|参数|类型|必填|说明| +|:-|:-|:-|:-| +|direction|Number|是|设置全屏时的方向,有效值为 0(正常竖向), 90(屏幕逆时针90度), -90(屏幕顺时针90度)。| +|success|Function|否|接口调用成功的回调函数。| +|fail|Function|否|接口调用失败的回调函数。| +|complete|Function|否|接口调用结束的回调函数(调用成功、失败都会执行)。| + +**其他方法的 Object 参数列表:** + +|参数|类型|必填|说明| +|:-|:-|:-|:-| +|success|Function|否|接口调用成功的回调函数| +|fail|Function|否|接口调用失败的回调函数| +|complete|Function|否|接口调用结束的回调函数(调用成功、失败都会执行)| diff --git a/docs/api/media/record-manager.md b/docs/api/media/record-manager.md new file mode 100644 index 0000000000000000000000000000000000000000..425d0964539282d9c00b4e0f4b4448036f624688 --- /dev/null +++ b/docs/api/media/record-manager.md @@ -0,0 +1,119 @@ +### uni.getRecorderManager() +获取**全局唯一**的录音管理器 ``recorderManager``。 + +**平台差异说明** + +|5+App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序| +|:-:|:-:|:-:|:-:|:-:|:-:| +|√|x|√|x|√|√| + +**recorderManager 对象的方法列表** + +|方法|参数|说明|平台差异说明| +|:-|:-|:-|:-| +|start|options|开始录音|| +|pause||暂停录音|| +|resume||继续录音|| +|stop||停止录音|| +|onStart|callback|录音开始事件|| +|onPause|callback|录音暂停事件|| +|onStop|callback|录音停止事件,会回调文件地址|| +|onFrameRecorded|callback|已录制完指定帧大小的文件,会回调录音分片结果数据。如果设置了 frameSize ,则会回调此事件|5+App 暂不支持| +|onError|callback|录音错误事件, 会回调错误信息| | + +**start(options) 说明** + +|属性|类型|必填|说明| +|:-|:-|:-|:-| +|duration|Number|否|指定录音的时长,单位 ms ,如果传入了合法的 duration ,在到达指定的 duration 后会自动停止录音,最大值 600000(10 分钟),默认值 60000(1 分钟)| +|sampleRate|Number|否|采样率,有效值 8000/16000/44100| +|numberOfChannels|Number|否|录音通道数,有效值 1/2| +|encodeBitRate|Number|否|编码码率,有效值见下表格| +|format|String|否|音频格式,有效值 aac/mp3| +|frameSize|String|否|指定帧大小,单位 KB。传入 frameSize 后,每录制指定帧大小的内容后,会回调录制的文件内容,不指定则不会回调。暂仅支持 mp3 格式。| + +其中,采样率和码率有一定要求,具体有效值如下: + +|采样率|编码码率| +|:-|:-| +|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| + +**onStop(callback) 回调结果说明** + +|属性|类型|说明| +|:-|:-|:-| +|tempFilePath|String|录音文件的临时路径| + + +**onFrameRecorded(callback) 回调结果说明** + +|属性|类型|说明| +|:-|:-|:-| +|frameBuffer|ArrayBuffer|录音分片结果数据| +|isLastFrame|Boolean|当前帧是否正常录音结束前的最后一帧| + +**onError(callback) 回调结果说明** + +|属性|类型|说明| +|:-|:-|:-| +|errMsg|String|错误信息| + +**示例** + +```html + +``` + +```javascript +const recorderManager = uni.getRecorderManager(); +const innerAudioContext = uni.createInnerAudioContext(); + +innerAudioContext.autoplay = true; + +export default { + data: { + text: 'uni-app', + voicePath: '' + }, + onLoad() { + let self = this; + recorderManager.onStop(function (res) { + console.log('recorder stop' + JSON.stringify(res)); + self.voicePath = res.tempFilePath; + }); + }, + methods: { + startRecord() { + console.log('开始录音'); + + recorderManager.start(); + }, + endRecord() { + console.log('录音结束'); + recorderManager.stop(); + }, + playVoice() { + console.log('播放录音'); + + if (this.voicePath) { + innerAudioContext.src = this.voicePath; + innerAudioContext.play(); + } + } + } +} +``` \ No newline at end of file diff --git a/docs/api/media/video-context.md b/docs/api/media/video-context.md new file mode 100644 index 0000000000000000000000000000000000000000..40fd643457b3bf6f20a1a8d7778edae508d9e2aa --- /dev/null +++ b/docs/api/media/video-context.md @@ -0,0 +1,113 @@ +### uni.createVideoContext(videoId, this) +创建并返回 video 上下文 videoContext 对象。在自定义组件下,第二个参数传入组件实例this,以操作组件内 ``