Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DCloud
unidocs-zh
提交
4b766754
unidocs-zh
项目概览
DCloud
/
unidocs-zh
通知
3216
Star
106
Fork
815
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
94
列表
看板
标记
里程碑
合并请求
70
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
unidocs-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
94
Issue
94
列表
看板
标记
里程碑
合并请求
70
合并请求
70
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
4b766754
编写于
8月 28, 2023
作者:
D
DCloud_LXH
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' of gitcode.net:dcloud/unidocs-zh
上级
57036e60
e7c06128
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
33 addition
and
33 deletion
+33
-33
docs/uni-app-x/_sidebar.md
docs/uni-app-x/_sidebar.md
+2
-2
docs/uni-app-x/dom/README.md
docs/uni-app-x/dom/README.md
+31
-31
未找到文件。
docs/uni-app-x/_sidebar.md
浏览文件 @
4b766754
...
...
@@ -113,8 +113,8 @@
*
[
CSSStyleDeclaration
](
dom/cssstyledeclaration.md
)
*
[
DrawableContext
](
dom/drawablecontext.md
)
*
事件event
*
[
事件系统概述
](
event.md
)
*
[
通用事件
](
event-common.md
)
*
[
事件系统概述
](
dom/
event.md
)
<!-- * [通用事件](event-common.md) -->
*
[
性能
](
performance.md
)
<!--
*
[
新建项目
](
)
*
[
1. 通过 HBuilderX 可视化界面
](
quickstart-hx.md
)
...
...
docs/uni-app-x/dom.md
→
docs/uni-app-x/dom
/README
.md
浏览文件 @
4b766754
# UVUE DOM
App-uvue的每个页面,在内存中都有一个 DOM(文档对象模型)。它和浏览器的
[
DOM规范
](
https://www.w3.org/DOM/?spm=a2c7j.-zh-docs-api-weex-variable.0.0.2a5537c6FrgbYp
)
类似。
App-uvue的每个页面,在内存中都有一个 DOM(文档对象模型)。它和浏览器的
[
DOM规范
](
https://www.w3.org/DOM/?spm=a2c7j.-zh-docs-api-weex-variable.0.0.2a5537c6FrgbYp
)
类似。
DOM 是页面元素内容的结构数据。DOM 模型用一个逻辑树来表示一个页面文档,树的每个分支的终点都是一个节点,每个节点都对应一个节点对象(INode)。
实际上 app-uvue 的template、数据绑定,在底层调用的也是 DOM API。
在浏览器中,开发者一旦跳过vue框架直接操作dom,vue框架将无法管理相应dom,开发者需要注意两端的冲突。
在 App 端,为了减少冲突,目前不支持通过 DOM API 创建和删除 DOM 树中的元素。只支持获取元素INode。
实际上 app-uvue 的template、数据绑定,在底层调用的也是 DOM API。
在浏览器中,开发者一旦跳过vue框架直接操作dom,vue框架将无法管理相应dom,开发者需要注意两端的冲突。
在 App 端,为了减少冲突,目前不支持通过 DOM API 创建和删除 DOM 树中的元素。只支持获取元素INode。
## 使用场景
通常情况下,使用 uvue 框架的数据绑定来操作更新页面组件就可以。但有2个场景,需要使用 DOM API。
1.
跟手动效
响应触屏事件更新组件的位置,要想不掉帧,需要保证16毫秒绘制一帧。
uvue的data更新,有一套diff机制,每次触发data更新,会多几毫秒的耗时。
此时推荐通过 DOM API 跳过 vue 框架直接操作组件的样式。
通常情况下,使用 uvue 框架的数据绑定来操作更新页面组件就可以。但有2个场景,需要使用 DOM API。
1.
跟手动效
响应触屏事件更新组件的位置,要想不掉帧,需要保证16毫秒绘制一帧。
uvue的data更新,有一套diff机制,每次触发data更新,会多几毫秒的耗时。
此时推荐通过 DOM API 跳过 vue 框架直接操作组件的样式。
2.
Draw API
Android和iOS的原生view,有一些底层的高性能绘制能力,这些API的调用,需要先获取到INode对象,然后再调用其方法。
在
[
性能
](
performance.md
)
章节,对这2个场景有详细的阐述。
Android和iOS的原生view,有一些底层的高性能绘制能力,这些API的调用,需要先获取到INode对象,然后再调用其方法。
在
[
性能
](
performance.md
)
章节,对这2个场景有详细的阐述。
## 获取DOM元素对象@getDomNode
app-uvue页面中可以通过 vue 框架中的组件实例对象
[
$refs
](
https://uniapp.dcloud.net.cn/tutorial/vue3-api.html#%E5%AE%9E%E4%BE%8B-property
)
获取 DOM 元素对象。
首先需要为组件设置 ref 属性值,它类似于id:
...
...
@@ -37,8 +37,8 @@ app-uvue页面中可以通过 vue 框架中的组件实例对象 [$refs](https:/
<view
ref=
"myNode"
class=
"container"
>
</view>
```
在页面
`onReady`
后(太早组件可能没有创建),通过
`$refs`
获取。如果长期使用,可以保存在vue的 data 中。
在页面
`onReady`
后(太早组件可能没有创建),通过
`$refs`
获取。如果长期使用,可以保存在vue的 data 中。
```
ts
export
default
{
data
()
{
...
...
@@ -52,7 +52,7 @@ export default {
},
}
```
通过INode对象的 style 属性更新组件的样式:
```
ts
this
.
myNode
?.
style
?.
setProperty
(
'
background-color
'
,
'
red
'
);
...
...
@@ -83,7 +83,7 @@ this.myNode?.style?.setProperty('background-color', 'red');
}
},
onLoad
()
{
},
},
onReady
()
{
// 获取组件对象
this
.
myNode
=
$refs
[
'
myNode
'
]
as
INode
;
...
...
@@ -99,7 +99,7 @@ this.myNode?.style?.setProperty('background-color', 'red');
<
style
>
.container
{
align-items
:
center
;
align-items
:
center
;
justify-content
:
center
;
background-color
:
aquamarine
;
width
:
100%
;
...
...
@@ -107,6 +107,6 @@ this.myNode?.style?.setProperty('background-color', 'red');
}
</
style
>
```
以上例子仅为演示DOM API的使用,实际上点击按钮修改背景色这种简单场景,使用数据绑定更简单,class绑定到一个data上,动态修改data即可。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录