32 lines
		
	
	
		
			No EOL
		
	
	
		
			789 B
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			32 lines
		
	
	
		
			No EOL
		
	
	
		
			789 B
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <div class="virtual-list-item"
 | |
|      ref:node
 | |
|      style="transform: translate3d(0, {{itemOffset}}px, 0);"
 | |
|      data-virtual-index="{{index}}"
 | |
|      data-virtual-key="{{key}}"
 | |
| >
 | |
|   <:Component {component} virtualProps="{{props}}" />
 | |
| </div>
 | |
| <style>
 | |
|   .virtual-list-item {
 | |
|     position: absolute;
 | |
|     top: 0;
 | |
|     will-change: transform;
 | |
|   }
 | |
| </style>
 | |
| <script>
 | |
|   import { virtualListStore } from '../_utils/virtualListStore'
 | |
| 
 | |
|   export default {
 | |
|     oncreate() {
 | |
|       let itemHeights = this.store.get('itemHeights')
 | |
|       itemHeights[this.get('key')] = this.refs.node.offsetHeight
 | |
|       this.store.set({itemHeights: itemHeights})
 | |
|     },
 | |
|     computed: {
 | |
|       itemOffset: ($itemOffsets, key) => {
 | |
|         return $itemOffsets[key] || 0
 | |
|       }
 | |
|     },
 | |
|     store: () => virtualListStore
 | |
|   }
 | |
| </script> |