Commit 0d0198664b3f83b94908299f207130dd45df3f82
Committed by
GitHub
Merge pull request #2628 from Jsnows/2.0
增加逻辑:
Showing
2 changed files
with
26 additions
and
4 deletions
Show diff stats
examples/routers/affix.vue
@@ -10,12 +10,24 @@ | @@ -10,12 +10,24 @@ | ||
10 | } | 10 | } |
11 | </style> | 11 | </style> |
12 | <template> | 12 | <template> |
13 | +<div> | ||
13 | <Affix> | 14 | <Affix> |
14 | - <span class="demo-affix">固定在最顶部</span> | 15 | + <div class="demo-affix">固定在最顶部</div> |
15 | </Affix> | 16 | </Affix> |
17 | + <div v-for="(item,index) in arr">{{item}}</div> | ||
18 | +</div> | ||
16 | </template> | 19 | </template> |
17 | <script> | 20 | <script> |
18 | export default { | 21 | export default { |
19 | - | 22 | + data(){ |
23 | + return { | ||
24 | + arr: [] | ||
25 | + } | ||
26 | + }, | ||
27 | + created(){ | ||
28 | + for(let i = 0 ; i < 100 ; i++){ | ||
29 | + this.arr.push(i); | ||
30 | + } | ||
31 | + } | ||
20 | } | 32 | } |
21 | </script> | 33 | </script> |
src/components/affix/affix.vue
1 | <template> | 1 | <template> |
2 | <div> | 2 | <div> |
3 | - <div :class="classes" :style="styles"> | 3 | + <div ref="point" :class="classes" :style="styles"> |
4 | <slot></slot> | 4 | <slot></slot> |
5 | </div> | 5 | </div> |
6 | + <div v-show="slot" :style="slotStyle"></div> | ||
6 | </div> | 7 | </div> |
7 | </template> | 8 | </template> |
8 | <script> | 9 | <script> |
@@ -52,7 +53,9 @@ | @@ -52,7 +53,9 @@ | ||
52 | data () { | 53 | data () { |
53 | return { | 54 | return { |
54 | affix: false, | 55 | affix: false, |
55 | - styles: {} | 56 | + styles: {}, |
57 | + slot: false, | ||
58 | + slotStyle: {} | ||
56 | }; | 59 | }; |
57 | }, | 60 | }, |
58 | computed: { | 61 | computed: { |
@@ -95,6 +98,11 @@ | @@ -95,6 +98,11 @@ | ||
95 | // Fixed Top | 98 | // Fixed Top |
96 | if ((elOffset.top - this.offsetTop) < scrollTop && this.offsetType == 'top' && !affix) { | 99 | if ((elOffset.top - this.offsetTop) < scrollTop && this.offsetType == 'top' && !affix) { |
97 | this.affix = true; | 100 | this.affix = true; |
101 | + this.slotStyle = { | ||
102 | + width: this.$refs.point.clientWidth + 'px', | ||
103 | + height: this.$refs.point.clientHeight + 'px' | ||
104 | + } | ||
105 | + this.slot = true; | ||
98 | this.styles = { | 106 | this.styles = { |
99 | top: `${this.offsetTop}px`, | 107 | top: `${this.offsetTop}px`, |
100 | left: `${elOffset.left}px`, | 108 | left: `${elOffset.left}px`, |
@@ -103,6 +111,8 @@ | @@ -103,6 +111,8 @@ | ||
103 | 111 | ||
104 | this.$emit('on-change', true); | 112 | this.$emit('on-change', true); |
105 | } else if ((elOffset.top - this.offsetTop) > scrollTop && this.offsetType == 'top' && affix) { | 113 | } else if ((elOffset.top - this.offsetTop) > scrollTop && this.offsetType == 'top' && affix) { |
114 | + this.slot = false; | ||
115 | + this.slotStyle = {}; | ||
106 | this.affix = false; | 116 | this.affix = false; |
107 | this.styles = null; | 117 | this.styles = null; |
108 | 118 |