Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DCloud
unidocs-uni-app-x-zh
提交
748bc76a
U
unidocs-uni-app-x-zh
项目概览
DCloud
/
unidocs-uni-app-x-zh
通知
144
Star
2
Fork
33
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
9
列表
看板
标记
里程碑
合并请求
11
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
unidocs-uni-app-x-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
9
Issue
9
列表
看板
标记
里程碑
合并请求
11
合并请求
11
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
748bc76a
编写于
1月 25, 2024
作者:
DCloud-yyl
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
优化DrawableContext示例
上级
702924cf
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
134 addition
and
81 deletion
+134
-81
docs/dom/README.md
docs/dom/README.md
+134
-81
未找到文件。
docs/dom/README.md
浏览文件 @
748bc76a
...
...
@@ -46,23 +46,23 @@ app-uvue 页面中可以为页面元素节点设置 id 属性,然后通过 [un
```
vue
<!-- id 属性值为 myView,后续可以通过此值查找 -->
<view
id=
"myView"
class=
"container"
>
<text>
Hello World
</text>
<text>
Hello World
</text>
</view>
```
在页面
`onReady`
后(太早组件可能没有创建),通过
`uni.getElementById`
获取。如果长期使用,可以保存在vue的 data 中。
```
ts
export
default
{
data
()
{
return
{
color
:
'
red
'
,
myView
:
null
as
UniElement
|
null
}
},
onReady
()
{
// 获取组件对象并保存在 this.myView 中
this
.
myView
=
uni
.
getElementById
(
'
myView
'
);
},
export
default
{
data
()
{
return
{
color
:
'
red
'
,
myView
:
null
as
UniElement
|
null
}
},
onReady
()
{
// 获取组件对象并保存在 this.myView 中
this
.
myView
=
uni
.
getElementById
(
'
myView
'
);
},
}
```
...
...
@@ -73,23 +73,23 @@ app-uvue页面中可以通过 vue 框架中的组件实例对象 [this.$refs](ht
```
vue
<!-- ref 属性值为 myView,后续可以通过此值查找 -->
<view
ref=
"myView"
class=
"container"
>
<text>
Hello World
</text>
<text>
Hello World
</text>
</view>
```
在页面
`onReady`
后(太早组件可能没有创建),通过
`this.$refs`
获取。如果长期使用,可以保存在vue的 data 中。
```
ts
export
default
{
data
()
{
return
{
color
:
'
red
'
,
myView
:
null
as
UniElement
|
null
}
},
onReady
()
{
// 获取组件对象并保存在 this.myView 中
this
.
myView
=
this
.
$refs
[
'
myView
'
]
as
UniElement
;
//需要使用 as 转换
},
export
default
{
data
()
{
return
{
color
:
'
red
'
,
myView
:
null
as
UniElement
|
null
}
},
onReady
()
{
// 获取组件对象并保存在 this.myView 中
this
.
myView
=
this
.
$refs
[
'
myView
'
]
as
UniElement
;
//需要使用 as 转换
},
}
```
...
...
@@ -105,73 +105,77 @@ this.myView?.style?.setProperty('background-color', 'red');
以下是完整的操作示例:
```
vue
<
template
>
<!-- #ifdef APP -->
<scroll-view
style=
"flex:1;align-items: center
;"
>
<!-- #endif -->
<view
id=
"myView"
ref=
"myView"
class=
"container"
>
<text>
Hello World
</text>
</view>
<button
@
tap=
"updateElement"
>
操作UniElement
</button>
<!-- #ifdef APP -->
</scroll-view>
<!-- #endif -->
<!-- #ifdef APP -->
<scroll-view
style=
"flex:1
;"
>
<!-- #endif -->
<view
id=
"myView"
ref=
"myView"
class=
"container"
>
<text>
Hello World
</text>
</view>
<button
class=
"button"
@
tap=
"updateElement"
>
操作UniElement
</button>
<!-- #ifdef APP -->
</scroll-view>
<!-- #endif -->
</
template
>
<
script
>
export
default
{
data
()
{
return
{
color
:
'
red
'
,
myView
:
null
as
UniElement
|
null
}
},
onLoad
()
{
},
onReady
()
{
this
.
myView
=
uni
.
getElementById
(
'
myView
'
);
//通过uni.getElementById获取
//this.myView = this.$refs['myView'] as UniElement; //通过this.$refs获取,需要使用 as 转换
},
methods
:
{
updateElement
()
{
this
.
color
=
'
red
'
==
this
.
color
?
'
blue
'
:
'
red
'
;
this
.
myView
?.
style
?.
setProperty
(
'
background-color
'
,
this
.
color
);
}
},
}
export
default
{
data
()
{
return
{
color
:
'
red
'
,
myView
:
null
as
UniElement
|
null
}
},
onLoad
()
{
},
onReady
()
{
this
.
myView
=
uni
.
getElementById
(
'
myView
'
);
//通过uni.getElementById获取
//this.myView = this.$refs['myView'] as UniElement; //通过this.$refs获取,需要使用 as 转换
},
methods
:
{
updateElement
()
{
this
.
color
=
'
red
'
==
this
.
color
?
'
blue
'
:
'
red
'
;
this
.
myView
?.
style
?.
setProperty
(
'
background-color
'
,
this
.
color
);
}
},
}
</
script
>
<
style
>
.container
{
align-items
:
center
;
justify-content
:
center
;
background-color
:
aquamarine
;
width
:
100%
;
height
:
200px
;
}
.container
{
align-self
:
center
;
align-items
:
center
;
justify-content
:
center
;
background-color
:
lightgray
;
width
:
100%
;
height
:
200px
;
}
.button
{
margin
:
10px
auto
;
}
</
style
>
```
>以上例子仅为演示DOM API的使用,实际上点击按钮修改背景色这种简单场景,使用数据绑定更简单,class绑定到一个data上,动态修改data即可。
## 通过
DrawableContext
绘制View
## 通过
DrawableContext
绘制View
uni-app x 在 app 端提供 DrawableContext 绘制内容到 uvue 页面的
`view`
标签上。可用于绘制文本、形状等内容。
### 获取 DrawableContext 对象
DrawableContext 可通过节点对象(UniElement)的
`getDrawableContext()`
方法获取
DrawableContext 可通过
`view`
组件
节点对象(UniElement)的
`getDrawableContext()`
方法获取
```
vue
<
template
>
<view
ref=
"drawable"
style=
"width: 750rpx;height: 750rpx;"
>
</view>
<view
ref=
"drawable"
class=
"drawableView"
></view>
</
template
>
<
script
>
export
default
{
onReady
()
{
var
ctx
=
(
this
.
$refs
[
'
drawable
'
]
as
UniElement
).
getDrawableContext
()
//获取 DrawableContext 对象
var
ctx
=
(
this
.
$refs
[
'
drawable
'
]
as
UniElement
).
getDrawableContext
()
!
;
}
}
</
script
>
...
...
@@ -179,13 +183,15 @@ DrawableContext 可通过节点对象(UniElement)的`getDrawableContext()`
### 绘制内容
通过 DrawableContext 提供的 API 绘制文本、形状等内容
通过 DrawableContext 提供的
Draw
API 绘制文本、形状等内容
```
ts
<
script
>
export
default
{
onReady
()
{
var
ctx
=
(
this
.
$refs
[
'
drawable
'
]
as
UniElement
).
getDrawableContext
()
//获取 DrawableContext 对象
var
ctx
=
(
this
.
$refs
[
'
drawable
'
]
as
UniElement
).
getDrawableContext
()
!
;
//绘制内容
ctx
.
moveTo
(
50
,
40
);
ctx
.
lineTo
(
200
,
40
);
ctx
.
stroke
();
...
...
@@ -202,11 +208,14 @@ DrawableContext 在调用 API 之后不会主动更新到画布上,需要主
<
script
>
export
default
{
onReady
()
{
var
ctx
=
(
this
.
$refs
[
'
drawable
'
]
as
UniElement
).
getDrawableContext
()
//获取 DrawableContext 对象
var
ctx
=
(
this
.
$refs
[
'
drawable
'
]
as
UniElement
).
getDrawableContext
()
!
;
//绘制内容
ctx
.
moveTo
(
50
,
40
);
ctx
.
lineTo
(
200
,
40
);
ctx
.
stroke
();
ctx
.
update
()
//更新到画布
ctx
.
update
();
}
}
<
/script>
...
...
@@ -216,38 +225,82 @@ DrawableContext 在调用 API 之后不会主动更新到画布上,需要主
如果清除已经绘制的内容重新绘制,需要调用
`reset()`
方法清除内容再进行绘制。
```
vue
<
script
>
export
default
{
methods
:
{
refreshDrawable
()
{
//获取 DrawableContext 对象
var
ctx
=
(
this
.
$refs
[
'
drawable
'
]
as
UniElement
).
getDrawableContext
()
!
;
//清除绘制内容
ctx
.
reset
();
//再重新绘制
}
}
}
</
script
>
```
### 示例
以下是完整的操作示例:
```
vue
<
template
>
<view
ref=
"drawable"
style=
"width: 750rpx;height: 750rpx;"
@
click=
"drawable"
>
<
/view
>
<view
ref=
"drawable"
class=
"drawableView"
></view
>
<
button
class=
"button"
@
tap=
"refreshDrawable"
>
重新绘制
</button
>
</
template
>
<
script
>
export
default
{
data
(){
return
{
change
:
false
change
:
false
}
},
onReady
()
{
this
.
drawable
()
//获取 DrawableContext 对象
var
ctx
=
(
this
.
$refs
[
'
drawable
'
]
as
UniElement
).
getDrawableContext
()
!
;
//绘制内容
ctx
.
moveTo
(
50
,
40
);
ctx
.
lineTo
(
200
,
40
);
ctx
.
stroke
();
//更新到画布
ctx
.
update
();
},
methods
:{
drawable
(){
var
ctx
=
(
this
.
$refs
[
'
drawable
'
]
as
UniElement
).
getDrawableContext
()
methods
:
{
refreshDrawable
()
{
//获取 DrawableContext 对象
var
ctx
=
(
this
.
$refs
[
'
drawable
'
]
as
UniElement
).
getDrawableContext
()
!
;
//清除绘制内容
ctx
.
reset
();
//根据状态设置画笔样式
this
.
change
=
!
this
.
change
;
if
(
this
.
change
)
{
ctx
.
strokeStyle
=
"
#
33ff0000
"
ctx
.
strokeStyle
=
"
#
FF0000
"
;
ctx
.
lineWidth
=
10
}
this
.
change
=
!
this
.
change
//绘制内容
ctx
.
moveTo
(
50
,
40
);
ctx
.
lineTo
(
200
,
40
);
ctx
.
stroke
();
ctx
.
update
()
//更新到画布
ctx
.
update
();
}
}
}
</
script
>
<
style
>
.drawableView
{
width
:
750
rpx
;
height
:
750
rpx
;
background-color
:
#FFFFFF
;
}
.button
{
margin
:
10px
auto
;
width
:
50%
;
}
</
style
>
```
## 注意事项
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录