Skip to content

Commit 833b264

Browse files
author
NJ-Rhys Liu
committed
fix: taro版 折叠面板增加一下动画控制,简化height计算
1 parent e23b386 commit 833b264

File tree

3 files changed

+18
-9
lines changed

3 files changed

+18
-9
lines changed

src/packages/__VUE/collapseitem/collapse-item.taro.vue

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,15 @@
2626
</view>
2727
</view>
2828

29-
<view v-if="$slots.extra" class="nut-collapse__item-extraWrapper">
29+
<view v-if="$slots.extra" class="nut-collapse__item-extraWrapper" :class="{ transition: transition }">
3030
<div class="nut-collapse__item-extraWrapper__extraRender">
3131
<slot name="extra"></slot>
3232
</div>
3333
</view>
3434
<view
3535
ref="wrapperRef"
3636
class="nut-collapse__item-wrapper"
37+
:class="{ transition: transition }"
3738
:style="{
3839
willChange: 'height',
3940
height: wrapperHeight
@@ -65,6 +66,7 @@ export type CollapseItemProps = Partial<{
6566
border: boolean
6667
icon: any
6768
rotate: string | number
69+
transition: boolean
6870
}>
6971
7072
const props = withDefaults(defineProps<CollapseItemProps>(), {
@@ -75,7 +77,8 @@ const props = withDefaults(defineProps<CollapseItemProps>(), {
7577
name: -1,
7678
border: true,
7779
icon: () => DownArrow,
78-
rotate: 180
80+
rotate: 180,
81+
transition: true
7982
})
8083
8184
const slots = useSlots()
@@ -136,7 +139,8 @@ const expanded = computed(() => {
136139
return false
137140
})
138141
139-
const wrapperHeight = ref(expanded.value ? 'auto' : '0px')
142+
const initial = 'initial'
143+
const wrapperHeight = ref(expanded.value ? initial : '0px')
140144
141145
const handleClick = () => {
142146
if (!inAnimation.value) {
@@ -150,16 +154,16 @@ const toggle = (open: boolean) => {
150154
clearTimeout(timeoutId.value)
151155
timeoutId.value = ''
152156
}
153-
const start = open ? '0px' : currentHeight.value
154-
const end = open ? currentHeight.value : '0px'
157+
const start = open ? '0px' : initial
158+
const end = open ? initial : '0px'
155159
inAnimation.value = true
156160
wrapperHeight.value = start
157161
setTimeout(() => {
158162
wrapperHeight.value = end
159163
inAnimation.value = false
160164
if (open) {
161165
timeoutId.value = setTimeout(() => {
162-
wrapperHeight.value = 'auto'
166+
wrapperHeight.value = initial
163167
}, 300)
164168
}
165169
}, 100)

src/packages/__VUE/collapseitem/collapse-item.vue

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,15 @@
2323
</view>
2424
</view>
2525

26-
<view v-if="$slots.extra" class="nut-collapse__item-extraWrapper">
26+
<view v-if="$slots.extra" class="nut-collapse__item-extraWrapper" :class="{ transition: transition }">
2727
<div class="nut-collapse__item-extraWrapper__extraRender">
2828
<slot name="extra"></slot>
2929
</div>
3030
</view>
3131
<view
3232
ref="wrapperRef"
3333
class="nut-collapse__item-wrapper"
34+
:class="{ transition: transition }"
3435
:style="{
3536
willChange: 'height',
3637
height: wrapperHeight
@@ -62,6 +63,7 @@ export type CollapseItemProps = Partial<{
6263
border: boolean
6364
icon: any
6465
rotate: string | number
66+
transition: boolean
6567
}>
6668
6769
const props = withDefaults(defineProps<CollapseItemProps>(), {
@@ -72,7 +74,8 @@ const props = withDefaults(defineProps<CollapseItemProps>(), {
7274
name: -1,
7375
border: true,
7476
icon: () => DownArrow,
75-
rotate: 180
77+
rotate: 180,
78+
transition: true
7679
})
7780
7881
// 获取 DOM 元素

src/packages/__VUE/collapseitem/index.scss

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,9 @@
9191
position: relative;
9292
height: 0;
9393
overflow: hidden;
94-
transition: height 0.3s ease-in-out;
94+
&.transition {
95+
transition: height 0.3s ease-in-out;
96+
}
9597
.nut-collapse__item-wrapper__content,
9698
.nut-collapse__item-extraWrapper__extraRender {
9799
display: block;

0 commit comments

Comments
 (0)