Scroll Table to top when next table pagination is pressed
-
I have a lot of data to render on my table.
5k plus data. I limit it 50 records per page.
The problem is when the next pagination is pressed the scroll stays where you left it.
I want to scroll to the top again when i press the next pagination
Thanks
-
@thekingrenz23 you could watch the pagination object and use https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView
I’m on mobile now, but I’ll post an example in the morning if you don’t figure it out. I just did the same sort of thing last week.
-
For an example, it’s something like this. Quasar has some scrolling utils you can use instead of a raw
scrollIntoView
call: https://quasar.dev/quasar-utils/scrolling-utils#Scrolling-to-an-elementAlso, you can watch all pagination props with a deep watcher instead of
'pagination.page'
: https://vuejs.org/v2/api/#watch<template> <div id="myTable" class="q-pa-md"> <q-table title="Treats" :data="data" :columns="columns" row-key="name" :pagination.sync="pagination" /> </div> </template> <script> export default { watch: { 'pagination.page'() { document.getElementById('myTable').scrollIntoView() } }, data () { return { pagination: { sortBy: 'desc', descending: false, page: 2, rowsPerPage: 3 // rowsNumber: xx if getting data from a server }, columns: [ { name: 'desc', required: true, label: 'Dessert (100g serving)', align: 'left', field: row => row.name, format: val => `${val}`, sortable: true }, { name: 'calories', align: 'center', label: 'Calories', field: 'calories', sortable: true }, { name: 'fat', label: 'Fat (g)', field: 'fat', sortable: true }, { name: 'carbs', label: 'Carbs (g)', field: 'carbs' }, { name: 'protein', label: 'Protein (g)', field: 'protein' }, { name: 'sodium', label: 'Sodium (mg)', field: 'sodium' }, { name: 'calcium', label: 'Calcium (%)', field: 'calcium', sortable: true, sort: (a, b) => parseInt(a, 10) - parseInt(b, 10) }, { name: 'iron', label: 'Iron (%)', field: 'iron', sortable: true, sort: (a, b) => parseInt(a, 10) - parseInt(b, 10) } ], data: [ { name: 'Frozen Yogurt', calories: 159, fat: 6.0, carbs: 24, protein: 4.0, sodium: 87, calcium: '14%', iron: '1%' }, { name: 'Ice cream sandwich', calories: 237, fat: 9.0, carbs: 37, protein: 4.3, sodium: 129, calcium: '8%', iron: '1%' }, { name: 'Eclair', calories: 262, fat: 16.0, carbs: 23, protein: 6.0, sodium: 337, calcium: '6%', iron: '7%' }, { name: 'Cupcake', calories: 305, fat: 3.7, carbs: 67, protein: 4.3, sodium: 413, calcium: '3%', iron: '8%' }, { name: 'Gingerbread', calories: 356, fat: 16.0, carbs: 49, protein: 3.9, sodium: 327, calcium: '7%', iron: '16%' }, { name: 'Jelly bean', calories: 375, fat: 0.0, carbs: 94, protein: 0.0, sodium: 50, calcium: '0%', iron: '0%' }, { name: 'Lollipop', calories: 392, fat: 0.2, carbs: 98, protein: 0, sodium: 38, calcium: '0%', iron: '2%' }, { name: 'Honeycomb', calories: 408, fat: 3.2, carbs: 87, protein: 6.5, sodium: 562, calcium: '0%', iron: '45%' }, { name: 'Donut', calories: 452, fat: 25.0, carbs: 51, protein: 4.9, sodium: 326, calcium: '2%', iron: '22%' }, { name: 'KitKat', calories: 518, fat: 26.0, carbs: 65, protein: 7, sodium: 54, calcium: '12%', iron: '6%' } ] } } } </script>