Skip to content

Commit 024836d

Browse files
authored
fix issues 24, issues 25 (#26)
* fix #24 * fix #25
1 parent 0d485f3 commit 024836d

File tree

1 file changed

+15
-4
lines changed

1 file changed

+15
-4
lines changed

src/VirtualGrid.vue

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<script lang="ts">
2-
import { Prop, Component, Vue, ProvideReactive } from 'vue-property-decorator';
2+
import { Prop, Component, Watch, Vue, ProvideReactive } from 'vue-property-decorator';
33
import {
44
getGridGapDefault,
55
getColumnCountDefault,
@@ -50,7 +50,9 @@ interface RenderData<P> {
5050
firstRenderedRowOffset: number | null;
5151
}
5252
53-
@Component
53+
@Component({
54+
name: 'VirtualGrid',
55+
})
5456
export default class VirtualGrid<P> extends Vue {
5557
@Prop({ required: true }) items: Item<P>[];
5658
@Prop({ default: () => () => true }) updateFunction: () => Promise<boolean>;
@@ -62,6 +64,7 @@ export default class VirtualGrid<P> extends Vue {
6264
width: number,
6365
columnWidth: number
6466
) => number;
67+
@Prop({ default: null }) scrollElement: HTMLElement | null;
6568
@Prop({ default: 500 }) updateTriggerMargin: number;
6669
@Prop({ default: null }) loader: Vue.Component;
6770
@Prop({ default: false }) debug: boolean;
@@ -99,12 +102,18 @@ export default class VirtualGrid<P> extends Vue {
99102
this.ref = this.$refs.virtualGrid as Element;
100103
this.initiliazeGrid();
101104
window.addEventListener('resize', this.resize);
102-
window.addEventListener('scroll', this.scroll);
105+
(this.scrollElement ?? window).addEventListener('scroll', this.scroll);
103106
}
104107
105108
beforeDestroy() {
106109
window.removeEventListener('resize', this.resize);
107-
window.removeEventListener('scroll', this.scroll);
110+
(this.scrollElement ?? window).removeEventListener('scroll', this.scroll);
111+
}
112+
113+
@Watch('scrollElement')
114+
onScrollElementChanged(scrollElement: HTMLElement | null, oldScrollElement: HTMLElement | null) {
115+
(oldScrollElement ?? window).removeEventListener('scroll', this.scroll);
116+
(scrollElement ?? window).addEventListener('scroll', this.scroll);
108117
}
109118
110119
resize(): void {
@@ -394,6 +403,7 @@ export default class VirtualGrid<P> extends Vue {
394403
getElementOffset(element: Element) {
395404
return window.scrollY + element.getBoundingClientRect().top;
396405
}
406+
397407
}
398408
</script>
399409

@@ -424,6 +434,7 @@ export default class VirtualGrid<P> extends Vue {
424434
<div
425435
v-for="item in renderData.cellsToRender"
426436
:key="item.id"
437+
class="grid-item-wrapper"
427438
:style="{
428439
'height': `${item.height}px`,
429440
'grid-column-start': item.columnNumber,

0 commit comments

Comments
 (0)