Commit 0d0198664b3f83b94908299f207130dd45df3f82

Authored by Aresn
Committed by GitHub
2 parents a56af92e 87c343e4

Merge pull request #2628 from Jsnows/2.0

增加逻辑:
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