Skip to content

Commit 3d24dc3

Browse files
feat: adds configurable list/item tags for semantic html (#203)
1 parent f19af6c commit 3d24dc3

File tree

4 files changed

+30
-4
lines changed

4 files changed

+30
-4
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,8 @@ When the user scrolls inside RecycleScroller, the views are mostly just moved ar
194194
- `prerender` (default: `0`): render a fixed number of items for Server-Side Rendering (SSR).
195195
- `buffer` (default: `200`): amount of pixel to add to edges of the scrolling visible area to start rendering items further away.
196196
- `emitUpdate` (default: `false`): emit a `'update'` event each time the virtual scroller content is updated (can impact performance).
197+
- `listTag` (default: `'div'`): the element to render as the list's wrapper.
198+
- `itemTag` (default: `'div'`): the element to render as the list item (the direct parent of the default slot content).
197199

198200
### Events
199201

src/components/DynamicScroller.vue

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
:min-item-size="minItemSize"
66
:direction="direction"
77
:key-field="keyField"
8+
:list-tag="listTag"
9+
:item-tag="itemTag"
810
v-bind="$attrs"
911
@resize="onScrollerResize"
1012
@visible="onScrollerVisible"

src/components/RecycleScroller.vue

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,14 @@
1919
/>
2020
</div>
2121

22-
<div
22+
<component
23+
:is="listTag"
2324
ref="wrapper"
2425
:style="{ [direction === 'vertical' ? 'minHeight' : 'minWidth']: totalSize + 'px' }"
2526
class="vue-recycle-scroller__item-wrapper"
2627
>
27-
<div
28+
<component
29+
:is="itemTag"
2830
v-for="view of pool"
2931
:key="view.nr.id"
3032
:style="ready ? { transform: `translate${direction === 'vertical' ? 'Y' : 'X'}(${view.position}px)` } : null"
@@ -38,8 +40,8 @@
3840
:index="view.nr.index"
3941
:active="view.nr.used"
4042
/>
41-
</div>
42-
</div>
43+
</component>
44+
</component>
4345

4446
<div
4547
v-if="$slots.after"
@@ -123,6 +125,16 @@ export default {
123125
type: Boolean,
124126
default: false,
125127
},
128+
129+
listTag: {
130+
type: String,
131+
default: 'div',
132+
},
133+
134+
itemTag: {
135+
type: String,
136+
default: 'div',
137+
},
126138
},
127139
128140
data () {

src/components/common.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,16 @@ export const props = {
1414
default: 'vertical',
1515
validator: (value) => ['vertical', 'horizontal'].includes(value),
1616
},
17+
18+
listTag: {
19+
type: String,
20+
default: 'div',
21+
},
22+
23+
itemTag: {
24+
type: String,
25+
default: 'div',
26+
},
1727
}
1828

1929
export function simpleArray () {

0 commit comments

Comments
 (0)