YingXingAI/node_modules/mp-html/docs/basic/event.md

174 lines
6.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

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

# 📫 事件 :id=event
## 获取方式 :id=method
- *uni-app*
*@* + 事件名 或 *v-on:* + 事件名
事件信息从 *event* 中获取
```vue
<template>
<view>
<mp-html @ready="ready" />
</view>
</template>
<script>
export default {
methods: {
ready (e) {
console.log(e)
}
}
}
</script>
```
- 支付宝小程序
*on* + 事件名(首字母大写)
事件信息从 *event* 中获取
```axml
<mp-html onReady="ready">
```
```javascript
Page({
ready (e) {
console.log(e)
}
})
```
- 其他小程序平台
*bind* + 事件名
事件信息从 *event.detail* 中获取
```wxml
<mp-html bindready="ready" />
```
```javascript
Page({
ready (e) {
console.log(e.detail)
}
})
```
## load
触发时机:*dom* 树加载完毕时
返回值:无
用途:可以调用 [api](advanced/api) 函数
## ready
触发时机:图片加载完毕时(不包含懒加载的图片)
?> 判断方式是 *350ms* 总高度无变化就认为加载完毕,部分情况下可能不准确;[2.4.0](changelog/changelog#v240) 版本起 [lazy-load](basic/prop#lazy-load) 属性为 *false* 时根据图片的 *load* 事件判断,可以基本准确触发
返回值:富文本区域的 *boundingClientRect* 结构体,包含大小位置信息
用途:此时进行 [锚点跳转](advanced/api#navigateTo) 可以基本保证跳转位置正确
?> 如果设置了 [懒加载](basic/prop#lazy-load),此时返回的大小不一定是最终大小,如果需要实时的大小,可以调用 [getRect](advanced/api#getRect) 方法
## error
触发时机:发生渲染错误时
返回值:一个 *object*,其中 *source* 为错误来源(包括 *img*、*video*、*audio**attrs* 为该标签的属性列表(包含 *src* 等信息),*errMsg* 是错误信息
用途:收集错误信息,减少使用出错率高的链接
## imgtap
触发时机:图片被点击时
返回值:该 *img* 标签的属性列表
用途:
默认情况下图片被点击时将自动预览(具体处理可见 [图片效果](overview/feature#img)),如果不希望如此,可将 [preview-img](basic/prop#preview-img) 属性设置为 *false* 并在这里自定义处理
如果需要用到富文本中所有图片的数组,可以通过 [imgList](advanced/api#imgList) 的 *api* 获取
示例:
```javascript
Page({
imgtap (e) {
// 对做了某种标记的图片进行预览
if (e.detail['data-flag']) {
wx.previewImage({
urls: [e.detail.src] // 仅预览单张图片
})
}
}
})
```
## linktap
触发时机:链接被点击时
返回值:该 *a* 标签的属性列表
?> [2.0.5](changelog/changelog#v205) 版本起增加返回该标签内部文本 *innerText*
用途:
默认情况下链接被点击时,对于外部链接,将被拷贝到剪贴板,如果不希望如此,可以将 [copy-link](basic/prop#copy-link) 属性的值设置为 *false* 后在这里自定义处理,可参考以下方案:
1. 跳转 *web-view*
跳转到一个新的页面,该页面放置一个 [web-view](https://developers.weixin.qq.com/miniprogram/dev/component/web-view.html) 用于显示外部网页(需要注意 *web-view* 的使用限制)
2. 跳转其他小程序
对于其他小程序的链接(可通过自行设置的 *data-* 属性判断),通过 [navigateToMiniProgram](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/miniprogram-navigate/wx.navigateToMiniProgram.html) 接口跳转(需要注意跳转限制)
3. 下载文档
对于文档类的链接(可通过后缀名或自行设置的 *data-* 属性判断),可以通过 [downloadFile](https://developers.weixin.qq.com/miniprogram/dev/api/network/download/wx.downloadFile.html) 接口下载文件后通过 [openDocument](https://developers.weixin.qq.com/miniprogram/dev/api/file/wx.openDocument.html) 接口打开文档(需要注意下载域名限制)
4. 下载压缩包
对于压缩包类的链接(可通过后缀名或自行设置的 *data-* 属性判断),可以通过 [downloadFile](https://developers.weixin.qq.com/miniprogram/dev/api/network/download/wx.downloadFile.html) 接口下载文件后通过 [FileSystemManager.unzip](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.unzip.html) 接口解压,然后进行打开文档等操作(需要注意下载域名限制)
对于大文件(可通过 *data-* 属性标注),还可以在下载前进行询问,下载过程中通过 [DownloadTask](https://developers.weixin.qq.com/miniprogram/dev/api/network/download/DownloadTask.html) 提示下载进度等
示例:
```javascript
Page({
linktap (e) {
if (e.detail.href.includes('.doc')) {
// 下载 doc 文件
wx.downloadFile({
url: e.detail.href,
success (res) {
wx.hideLoading()
wx.openDocument({
filePath: res.tempFilePath
})
},
fail (err) {
wx.hideLoading()
wx.showModal({
title: '失败',
content: err.errMsg,
showCancel: false
})
}
})
} else if (e.detail.href.includes('xxx.com')) {
// 跳转到 webview
wx.navigateTo({
url: 'pages/webview/webview?url=' + e.detail.href,
})
} else if (e.detail['data-appid']) {
// 跳转其他小程序
wx.navigateToMiniProgram({
appId: e.detail['data-appid']
})
}
}
})
```
## play
?> [2.3.0](changelog/changelog#v230) 版本起支持
触发时机:音视频播放时
返回值:无
?> [2.5.0](changelog/changelog#v250) 版本起返回值变更为一个 *object*,其中 *source* 为播放来源(包括 *video*、*audio**attrs* 为该标签的属性列表(包含 *src* 等信息),可以统计播放量等信息
用途:和 [pauseMedia](advanced/api#pauseMedia) 的 `api` 配合可以实现与页面中其他音视频进行互斥播放
示例:
```javascript
Page({
// 页面中的音视频播放事件
pagePlay() {
// ctx 为组件实例
ctx.pauseMedia() // 暂停组件内的音视频播放
},
// 组件的 play 事件
componentPlay() {
// media 为页面中的音视频实例
media.pause() // 暂停页面中的音视频播放
}
})
```