Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
qianlong66
uni-app
提交
149d2164
U
uni-app
项目概览
qianlong66
/
uni-app
与 Fork 源项目一致
Fork自
DCloud / uni-app
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
uni-app
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
149d2164
编写于
9月 13, 2022
作者:
D
DCloud_LXH
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix(app-nvue): picker-column set values error
上级
c42f0dca
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
84 addition
and
46 deletion
+84
-46
packages/uni-components/src/nvue/picker-view-column/index.tsx
...ages/uni-components/src/nvue/picker-view-column/index.tsx
+76
-43
packages/uni-components/src/nvue/picker-view/index.tsx
packages/uni-components/src/nvue/picker-view/index.tsx
+8
-3
未找到文件。
packages/uni-components/src/nvue/picker-view-column/index.tsx
浏览文件 @
149d2164
...
...
@@ -8,6 +8,8 @@ import {
computed
,
getCurrentInstance
,
onMounted
,
ExtractPropTypes
,
WritableComputedRef
,
}
from
'
vue
'
import
{
extend
,
isString
}
from
'
@vue/shared
'
import
{
Props
,
GetPickerViewColumn
}
from
'
../picker-view
'
...
...
@@ -20,6 +22,7 @@ type ScrollOptions = {
scrollY
:
boolean
scrollTop
?:
number
}
type
PickerColumnProps
=
ExtractPropTypes
<
typeof
props
>
const
dom
=
weex
.
requireModule
(
'
dom
'
)
const
isAndroid
=
weex
.
config
.
env
.
platform
.
toLowerCase
()
===
'
android
'
...
...
@@ -27,14 +30,16 @@ function getStyle(val: string) {
return
extend
({},
isString
(
val
)
?
parseStyleText
(
val
)
:
val
)
}
export
default
defineComponent
({
name
:
'
PickerViewColumn
'
,
props
:
{
const
props
=
{
length
:
{
type
:
[
Number
,
String
],
default
:
0
,
},
},
}
export
default
defineComponent
({
name
:
'
PickerViewColumn
'
,
props
,
data
:
()
=>
({
_isMounted
:
false
,
}),
...
...
@@ -61,45 +66,13 @@ export default defineComponent({
let
pickerViewHeight
=
ref
(
0
)
pickerViewHeight
.
value
=
parseFloat
(
pickerViewProps
.
height
as
string
)
watch
(
()
=>
props
.
length
,
()
=>
{
setTimeout
(()
=>
{
setCurrent
(
current
.
value
,
true
,
true
)
},
150
)
}
const
{
setCurrent
,
onScrollend
}
=
usePickerColumnScroll
(
props
,
current
,
contentRef
,
indicatorHeight
)
let
scrollToElementTime
:
number
const
setCurrent
=
(
_current
:
number
,
animated
=
true
,
force
:
Boolean
)
=>
{
if
(
current
.
value
===
_current
&&
!
force
)
{
return
}
dom
.
scrollToElement
(
contentRef
.
value
,
{
offset
:
_current
*
indicatorHeight
.
value
,
animated
,
})
current
.
value
=
_current
if
(
animated
)
{
scrollToElementTime
=
Date
.
now
()
}
}
const
onScrollend
=
(
event
:
{
detail
:
{
contentOffset
:
{
x
:
number
;
y
:
number
}
}
})
=>
{
if
(
Date
.
now
()
-
scrollToElementTime
<
340
)
{
return
}
const
y
=
event
.
detail
.
contentOffset
.
y
const
_current
=
Math
.
round
(
y
/
indicatorHeight
.
value
)
if
(
y
%
indicatorHeight
.
value
)
{
setCurrent
(
_current
,
true
,
true
)
}
else
{
current
.
value
=
_current
}
}
const
checkMounted
=
()
=>
{
let
height_
:
number
let
indicatorHeight_
:
number
...
...
@@ -273,3 +246,63 @@ function getHeight(style: Record<string, any>) {
}
return
value
}
function
usePickerColumnScroll
(
props
:
PickerColumnProps
,
current
:
WritableComputedRef
<
number
>
,
contentRef
:
Ref
<
HTMLElement
|
null
>
,
indicatorHeight
:
Ref
<
number
>
)
{
let
scrollToElementTime
:
number
watch
(
()
=>
props
.
length
,
()
=>
{
setTimeout
(()
=>
{
setCurrent
(
current
.
value
,
true
,
true
)
},
150
)
}
)
watch
(
()
=>
current
.
value
,
(
_current
)
=>
{
dom
.
scrollToElement
(
contentRef
.
value
,
{
offset
:
_current
*
indicatorHeight
.
value
,
animated
:
true
,
})
scrollToElementTime
=
Date
.
now
()
}
)
const
setCurrent
=
(
_current
:
number
,
animated
=
true
,
force
:
Boolean
)
=>
{
if
(
current
.
value
===
_current
&&
!
force
)
{
return
}
dom
.
scrollToElement
(
contentRef
.
value
,
{
offset
:
_current
*
indicatorHeight
.
value
,
animated
,
})
current
.
value
=
_current
if
(
animated
)
{
scrollToElementTime
=
Date
.
now
()
}
}
const
onScrollend
=
(
event
:
{
detail
:
{
contentOffset
:
{
x
:
number
;
y
:
number
}
}
})
=>
{
if
(
Date
.
now
()
-
scrollToElementTime
<
340
)
{
return
}
const
y
=
event
.
detail
.
contentOffset
.
y
const
_current
=
Math
.
round
(
y
/
indicatorHeight
.
value
)
if
(
y
%
indicatorHeight
.
value
)
{
setCurrent
(
_current
,
true
,
true
)
}
else
{
current
.
value
=
_current
}
}
return
{
setCurrent
,
onScrollend
}
}
packages/uni-components/src/nvue/picker-view/index.tsx
浏览文件 @
149d2164
...
...
@@ -8,6 +8,7 @@ import {
VNode
,
provide
,
ExtractPropTypes
,
Comment
,
}
from
'
vue
'
import
{
extend
}
from
'
@vue/shared
'
import
{
...
...
@@ -35,8 +36,12 @@ export default defineComponent({
const
trigger
=
useCustomEvent
<
EmitEvent
<
typeof
emit
>>
(
rootRef
,
emit
)
let
columnVNodes
:
VNode
[]
=
[]
const
getItemIndex
=
(
vnode
:
VNode
)
=>
Array
.
prototype
.
indexOf
.
call
(
columnVNodes
,
vnode
)
const
getItemIndex
=
(
vnode
:
VNode
)
=>
{
return
Array
.
prototype
.
indexOf
.
call
(
columnVNodes
.
filter
((
vnode
)
=>
vnode
.
type
!==
Comment
),
vnode
)
}
const
getPickerViewColumn
:
GetPickerViewColumn
=
(
columnInstance
)
=>
{
return
computed
({
get
()
{
...
...
@@ -81,7 +86,7 @@ export default defineComponent({
preventGesture
:
true
,
}
}
>
<
view
class
=
"uni-picker-view-wrapper"
>
{
defaultSlot
s
}
</
view
>
<
view
class
=
"uni-picker-view-wrapper"
>
{
columnVNode
s
}
</
view
>
</
view
>
)
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录