Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
genary
uni-app
提交
10dd6892
U
uni-app
项目概览
genary
/
uni-app
与 Fork 源项目一致
Fork自
DCloud / uni-app
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
uni-app
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
10dd6892
编写于
5月 26, 2021
作者:
D
DCloud_LXH
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
chore: scroll-view
上级
b83c098e
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
60 addition
and
44 deletion
+60
-44
packages/uni-components/src/components/scroll-view/index.tsx
packages/uni-components/src/components/scroll-view/index.tsx
+60
-44
未找到文件。
packages/uni-components/src/components/scroll-view/index.tsx
浏览文件 @
10dd6892
...
...
@@ -21,6 +21,7 @@ import { defineBuiltInComponent } from '@dcloudio/uni-components'
type
HTMLRef
=
Ref
<
HTMLElement
|
null
>
type
Props
=
ExtractPropTypes
<
typeof
props
>
type
RefreshState
=
'
refreshing
'
|
'
restore
'
|
'
pulling
'
|
''
type
Direction
=
'
x
'
|
'
y
'
interface
State
{
lastScrollTop
:
number
lastScrollLeft
:
number
...
...
@@ -98,7 +99,15 @@ export default /*#__PURE__*/ defineBuiltInComponent({
MODE
:
3
,
},
props
,
emits
:
[
'
scroll
'
,
'
scrolltoupper
'
,
'
scrolltolower
'
,
'
refresherabort
'
],
emits
:
[
'
scroll
'
,
'
scrolltoupper
'
,
'
scrolltolower
'
,
'
refresherrefresh
'
,
'
refresherrestore
'
,
'
refresherpulling
'
,
'
refresherabort
'
,
],
setup
(
props
,
{
emit
,
slots
})
{
const
rootRef
:
HTMLRef
=
ref
(
null
)
const
main
:
HTMLRef
=
ref
(
null
)
...
...
@@ -252,42 +261,52 @@ function useScrollViewLoader(
return
isNaN
(
val
)
?
50
:
val
})
function
scrollTo
(
t
:
number
,
n
:
'
x
'
|
'
y
'
)
{
var
i
=
main
.
value
!
t
<
0
?
(
t
=
0
)
:
n
===
'
x
'
&&
t
>
i
.
scrollWidth
-
i
.
offsetWidth
?
(
t
=
i
.
scrollWidth
-
i
.
offsetWidth
)
:
n
===
'
y
'
&&
t
>
i
.
scrollHeight
-
i
.
offsetHeight
&&
(
t
=
i
.
scrollHeight
-
i
.
offsetHeight
)
var
r
=
0
var
o
=
''
n
===
'
x
'
?
(
r
=
i
.
scrollLeft
-
t
)
:
n
===
'
y
'
&&
(
r
=
i
.
scrollTop
-
t
)
if
(
r
!==
0
)
{
content
.
value
!
.
style
.
transition
=
'
transform .3s ease-out
'
content
.
value
!
.
style
.
webkitTransition
=
'
-webkit-transform .3s ease-out
'
if
(
n
===
'
x
'
)
{
o
=
'
translateX(
'
+
r
+
'
px) translateZ(0)
'
}
else
{
n
===
'
y
'
&&
(
o
=
'
translateY(
'
+
r
+
'
px) translateZ(0)
'
)
}
content
.
value
!
.
removeEventListener
(
'
transitionend
'
,
__transitionEnd
)
content
.
value
!
.
removeEventListener
(
'
webkitTransitionEnd
'
,
__transitionEnd
)
__transitionEnd
=
()
=>
_transitionEnd
(
t
,
n
)
content
.
value
!
.
addEventListener
(
'
transitionend
'
,
__transitionEnd
)
content
.
value
!
.
addEventListener
(
'
webkitTransitionEnd
'
,
__transitionEnd
)
if
(
n
===
'
x
'
)
{
// if (e !== 'ios') {
i
.
style
.
overflowX
=
'
hidden
'
// }
}
else
if
(
n
===
'
y
'
)
{
i
.
style
.
overflowY
=
'
hidden
'
}
function
scrollTo
(
scrollToValue
:
number
,
direction
:
Direction
)
{
const
container
=
main
.
value
!
let
transformValue
=
0
let
transform
=
''
scrollToValue
<
0
?
(
scrollToValue
=
0
)
:
direction
===
'
x
'
&&
scrollToValue
>
container
.
scrollWidth
-
container
.
offsetWidth
?
(
scrollToValue
=
container
.
scrollWidth
-
container
.
offsetWidth
)
:
direction
===
'
y
'
&&
scrollToValue
>
container
.
scrollHeight
-
container
.
offsetHeight
&&
(
scrollToValue
=
container
.
scrollHeight
-
container
.
offsetHeight
)
direction
===
'
x
'
?
(
transformValue
=
container
.
scrollLeft
-
scrollToValue
)
:
direction
===
'
y
'
&&
(
transformValue
=
container
.
scrollTop
-
scrollToValue
)
content
.
value
!
.
style
.
transform
=
o
content
.
value
!
.
style
.
webkitTransform
=
o
if
(
transformValue
===
0
)
return
let
_content
=
content
.
value
!
_content
.
style
.
transition
=
'
transform .3s ease-out
'
_content
.
style
.
webkitTransition
=
'
-webkit-transform .3s ease-out
'
if
(
direction
===
'
x
'
)
{
transform
=
'
translateX(
'
+
transformValue
+
'
px) translateZ(0)
'
}
else
{
direction
===
'
y
'
&&
(
transform
=
'
translateY(
'
+
transformValue
+
'
px) translateZ(0)
'
)
}
_content
.
removeEventListener
(
'
transitionend
'
,
__transitionEnd
)
_content
.
removeEventListener
(
'
webkitTransitionEnd
'
,
__transitionEnd
)
__transitionEnd
=
()
=>
_transitionEnd
(
scrollToValue
,
direction
)
_content
.
addEventListener
(
'
transitionend
'
,
__transitionEnd
)
_content
.
addEventListener
(
'
webkitTransitionEnd
'
,
__transitionEnd
)
if
(
direction
===
'
x
'
)
{
// if (e !== 'ios') {
container
.
style
.
overflowX
=
'
hidden
'
// }
}
else
if
(
direction
===
'
y
'
)
{
container
.
style
.
overflowY
=
'
hidden
'
}
_content
.
style
.
transform
=
transform
_content
.
style
.
webkitTransform
=
transform
}
function
_handleScroll
(
$event
:
MouseEvent
)
{
if
(
$event
.
timeStamp
-
_lastScrollTime
>
20
)
{
...
...
@@ -410,16 +429,16 @@ function useScrollViewLoader(
}
}
}
function
_transitionEnd
(
val
:
number
,
type
:
'
x
'
|
'
y
'
)
{
function
_transitionEnd
(
val
:
number
,
direction
:
Direction
)
{
content
.
value
!
.
style
.
transition
=
''
content
.
value
!
.
style
.
webkitTransition
=
''
content
.
value
!
.
style
.
transform
=
''
content
.
value
!
.
style
.
webkitTransform
=
''
let
_main
=
main
.
value
!
if
(
type
===
'
x
'
)
{
if
(
direction
===
'
x
'
)
{
_main
.
style
.
overflowX
=
props
.
scrollX
?
'
auto
'
:
'
hidden
'
_main
.
scrollLeft
=
val
}
else
if
(
type
===
'
y
'
)
{
}
else
if
(
direction
===
'
y
'
)
{
_main
.
style
.
overflowY
=
props
.
scrollY
?
'
auto
'
:
'
hidden
'
_main
.
scrollTop
=
val
}
...
...
@@ -467,8 +486,7 @@ function useScrollViewLoader(
y
:
0
,
}
let
needStop
:
boolean
|
null
=
null
let
__handleTouchMove
=
function
(
_event
:
Event
)
{
const
event
=
_event
as
TouchEvent
let
__handleTouchMove
=
function
(
event
:
TouchEvent
)
{
var
x
=
event
.
touches
[
0
].
pageX
var
y
=
event
.
touches
[
0
].
pageY
var
_main
=
main
.
value
!
...
...
@@ -530,8 +548,7 @@ function useScrollViewLoader(
})
}
}
let
__handleTouchStart
=
function
(
_event
:
Event
)
{
const
event
=
_event
as
TouchEvent
let
__handleTouchStart
=
function
(
event
:
TouchEvent
)
{
if
(
event
.
touches
.
length
===
1
)
{
disableScrollBounce
({
disable
:
true
,
...
...
@@ -550,8 +567,7 @@ function useScrollViewLoader(
}
}
}
let
__handleTouchEnd
=
function
(
_event
:
Event
)
{
const
event
=
_event
as
TouchEvent
let
__handleTouchEnd
=
function
(
event
:
TouchEvent
)
{
touchStart
=
{
x
:
0
,
y
:
0
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录