File tree 1 file changed +39
-6
lines changed
src/components/MdCard/MdCardExpand
1 file changed +39
-6
lines changed Original file line number Diff line number Diff line change 5
5
</template >
6
6
7
7
<script >
8
+ import MdObserveElement from ' core/utils/MdObserveElement'
8
9
export default {
9
10
name: ' MdCardExpandContent' ,
10
11
inject: [' MdCard' ],
11
12
data : () => ({
12
- marginTop: 0
13
+ marginTop: 0 ,
14
+ resizeObserver: null ,
15
+ transitionEnabled: true
13
16
}),
14
17
computed: {
15
18
expand () {
18
21
contentStyles () {
19
22
return {
20
23
' margin-top' : ` -${ this .marginTop } px` ,
21
- ' opacity' : this .marginTop === 0 ? 1 : 0
24
+ ' opacity' : this .marginTop === 0 ? 1 : 0 ,
25
+ ' transition-property' : this .transitionEnabled ? null : ' none'
22
26
}
23
27
}
24
28
},
25
- watch : {
26
- expand ( expand ) {
27
- if (! expand) {
29
+ methods : {
30
+ calculateMarginTop ( ) {
31
+ if (! this . expand ) {
28
32
this .marginTop = this .$el .children [0 ].offsetHeight
29
33
} else {
30
34
this .marginTop = 0
31
35
}
36
+ },
37
+ calculateMarginTopImmediately () {
38
+ if (this .expand ) {
39
+ return
40
+ }
41
+
42
+ this .transitionEnabled = false
43
+ this .$nextTick (() => {
44
+ this .calculateMarginTop ()
45
+ this .$nextTick (() => {
46
+ // force reflow
47
+ this .$el .offsetHeight
48
+ this .transitionEnabled = true
49
+ })
50
+ })
51
+ }
52
+ },
53
+ watch: {
54
+ expand () {
55
+ this .calculateMarginTop ()
32
56
}
33
57
},
34
58
mounted () {
35
- this .marginTop = this .$el .children [0 ].offsetHeight
59
+ this .calculateMarginTopImmediately ()
60
+
61
+ this .resizeObserver = MdObserveElement (this .$el , {
62
+ childList: true ,
63
+ characterData: true ,
64
+ subtree: true
65
+ }, this .calculateMarginTopImmediately )
66
+ },
67
+ beforeDestroy () {
68
+ this .resizeObserver .disconnect ()
36
69
}
37
70
}
38
71
</script >
You can’t perform that action at this time.
0 commit comments