Commit 14d1de0573b3307c438cb86ac5cbcee299102054
1 parent
ebaf3c1d
fix table changing small scrollbar bug
Showing
4 changed files
with
32 additions
and
13 deletions
Show diff stats
examples/routers/table.vue
1 | <template> | 1 | <template> |
2 | <div> | 2 | <div> |
3 | - <Table border ref="selection" :columns="columns4" :data="data1"></Table> | 3 | + <Table border ref="selection" :columns="columns4" :data="data1" :height='258'></Table> |
4 | <Button @click="handleSetData">Set Data</Button> | 4 | <Button @click="handleSetData">Set Data</Button> |
5 | <Button @click="handleClearData">Clear Data</Button> | 5 | <Button @click="handleClearData">Clear Data</Button> |
6 | <Button @click="handleSelectAll(true)">Set all selected</Button> | 6 | <Button @click="handleSelectAll(true)">Set all selected</Button> |
@@ -28,7 +28,8 @@ | @@ -28,7 +28,8 @@ | ||
28 | }, | 28 | }, |
29 | { | 29 | { |
30 | title: 'Name', | 30 | title: 'Name', |
31 | - key: 'name' | 31 | + key: 'name', |
32 | + width: 260 | ||
32 | }, | 33 | }, |
33 | { | 34 | { |
34 | title: 'Age', | 35 | title: 'Age', |
@@ -36,7 +37,13 @@ | @@ -36,7 +37,13 @@ | ||
36 | }, | 37 | }, |
37 | { | 38 | { |
38 | title: 'Address', | 39 | title: 'Address', |
39 | - key: 'address' | 40 | + key: 'address', |
41 | + width: 260 | ||
42 | + }, | ||
43 | + { | ||
44 | + title: 'Address', | ||
45 | + key: 'address', | ||
46 | + width: 260 | ||
40 | } | 47 | } |
41 | ], | 48 | ], |
42 | data1: [ | 49 | data1: [ |
src/components/table/mixin.js
@@ -27,7 +27,7 @@ export default { | @@ -27,7 +27,7 @@ export default { | ||
27 | // when browser has scrollBar,set a width to resolve scroll position bug | 27 | // when browser has scrollBar,set a width to resolve scroll position bug |
28 | if (width && this.columns.length === index + 1 && top && this.$parent.bodyHeight !== 0) { | 28 | if (width && this.columns.length === index + 1 && top && this.$parent.bodyHeight !== 0) { |
29 | let scrollBarWidth = this.$parent.scrollBarWidth; | 29 | let scrollBarWidth = this.$parent.scrollBarWidth; |
30 | - if (!this.$parent.showScrollBar()) scrollBarWidth = 0; | 30 | + if (!this.$parent.showScrollBar) scrollBarWidth = 0; |
31 | width += scrollBarWidth; | 31 | width += scrollBarWidth; |
32 | } | 32 | } |
33 | // when fixed type,reset first right fixed column's width | 33 | // when fixed type,reset first right fixed column's width |
@@ -35,7 +35,7 @@ export default { | @@ -35,7 +35,7 @@ export default { | ||
35 | const firstFixedIndex = this.columns.findIndex((col) => col.fixed === 'right'); | 35 | const firstFixedIndex = this.columns.findIndex((col) => col.fixed === 'right'); |
36 | if (firstFixedIndex === index) { | 36 | if (firstFixedIndex === index) { |
37 | let scrollBarWidth = this.$parent.scrollBarWidth; | 37 | let scrollBarWidth = this.$parent.scrollBarWidth; |
38 | - if (!this.$parent.showScrollBar()) scrollBarWidth = 0; | 38 | + if (!this.$parent.showScrollBar) scrollBarWidth = 0; |
39 | width += scrollBarWidth; | 39 | width += scrollBarWidth; |
40 | } | 40 | } |
41 | } | 41 | } |
src/components/table/table-head.vue
@@ -86,7 +86,7 @@ | @@ -86,7 +86,7 @@ | ||
86 | styles () { | 86 | styles () { |
87 | const style = Object.assign({}, this.styleObject); | 87 | const style = Object.assign({}, this.styleObject); |
88 | let scrollBarWidth = this.$parent.scrollBarWidth; | 88 | let scrollBarWidth = this.$parent.scrollBarWidth; |
89 | - if(!this.$parent.showScrollBar()) scrollBarWidth = 0; | 89 | + if(!this.$parent.showScrollBar) scrollBarWidth = 0; |
90 | const width = this.$parent.bodyHeight === 0 ? parseInt(this.styleObject.width) : parseInt(this.styleObject.width) + scrollBarWidth; | 90 | const width = this.$parent.bodyHeight === 0 ? parseInt(this.styleObject.width) : parseInt(this.styleObject.width) + scrollBarWidth; |
91 | style.width = `${width}px`; | 91 | style.width = `${width}px`; |
92 | return style; | 92 | return style; |
src/components/table/table.vue
@@ -186,7 +186,8 @@ | @@ -186,7 +186,8 @@ | ||
186 | bodyRealHeight: 0, | 186 | bodyRealHeight: 0, |
187 | scrollBarWidth: getScrollBarSize(), | 187 | scrollBarWidth: getScrollBarSize(), |
188 | currentContext: this.context, | 188 | currentContext: this.context, |
189 | - cloneData: deepCopy(this.data) // when Cell has a button to delete row data, clickCurrentRow will throw an error, so clone a data | 189 | + cloneData: deepCopy(this.data), // when Cell has a button to delete row data, clickCurrentRow will throw an error, so clone a data |
190 | + showScrollBar:false, | ||
190 | }; | 191 | }; |
191 | }, | 192 | }, |
192 | computed: { | 193 | computed: { |
@@ -338,12 +339,6 @@ | @@ -338,12 +339,6 @@ | ||
338 | rowClsName (index) { | 339 | rowClsName (index) { |
339 | return this.rowClassName(this.data[index], index); | 340 | return this.rowClassName(this.data[index], index); |
340 | }, | 341 | }, |
341 | - showScrollBar () { | ||
342 | - if (!this.$refs.tbody) return false; | ||
343 | - let bodyContent = this.$refs.tbody.$el; | ||
344 | - let bodyContentHeight = parseInt(getStyle(bodyContent, 'height')); | ||
345 | - return this.bodyHeight? this.bodyHeight < bodyContentHeight : false; | ||
346 | - }, | ||
347 | handleResize () { | 342 | handleResize () { |
348 | this.$nextTick(() => { | 343 | this.$nextTick(() => { |
349 | const allWidth = !this.columns.some(cell => !cell.width); // each column set a width | 344 | const allWidth = !this.columns.some(cell => !cell.width); // each column set a width |
@@ -381,6 +376,23 @@ | @@ -381,6 +376,23 @@ | ||
381 | } | 376 | } |
382 | this.columnsWidth = columnsWidth; | 377 | this.columnsWidth = columnsWidth; |
383 | this.fixedHeader(); | 378 | this.fixedHeader(); |
379 | + | ||
380 | + if (this.$refs.tbody) { | ||
381 | + let bodyContent = this.$refs.tbody.$el; | ||
382 | + let className = bodyContent.parentElement.className; | ||
383 | + bodyContent.parentElement.className = ''; | ||
384 | + let bodyContentHeight = bodyContent.offsetHeight; | ||
385 | + let bodyContentWidth = bodyContent.offsetWidth; | ||
386 | + bodyContent.parentElement.className = className; | ||
387 | + let bodyWidth = this.$refs.tbody.$el.parentElement.offsetWidth; | ||
388 | + let bodyHeight = this.$refs.tbody.$el.parentElement.offsetHeight; | ||
389 | + let scrollBarWidth = 0; | ||
390 | + if (bodyWidth < bodyContentWidth) { | ||
391 | + scrollBarWidth = this.scrollBarWidth; | ||
392 | + } | ||
393 | + let show = this.bodyHeight? bodyHeight - scrollBarWidth < bodyContentHeight : false; | ||
394 | + this.showScrollBar = show; | ||
395 | + } | ||
384 | } | 396 | } |
385 | }); | 397 | }); |
386 | // get table real height,for fixed when set height prop,but height < table's height,show scrollBarWidth | 398 | // get table real height,for fixed when set height prop,but height < table's height,show scrollBarWidth |