Trung BìnhVue.js iconVue.js

Scroll behavior trong Vue Router — restore scroll position?

Vue Router cho phép kiểm soát scroll behavior khi navigate:

typescript
const router = createRouter({
  history: createWebHistory(),
  routes,
  scrollBehavior(to, from, savedPosition) {
    // savedPosition: vị trí scroll trước đó khi dùng browser back/forward
    if (savedPosition) {
      return savedPosition  // Restore khi back/forward
    }

    // Scroll đến named anchor
    if (to.hash) {
      return {
        el: to.hash,
        behavior: 'smooth',
        top: 80,  // Offset cho fixed header
      }
    }

    // Scroll về đầu trang khi navigate thường
    return { top: 0, behavior: 'smooth' }
  },
})

// Async scroll — chờ transition xong
scrollBehavior(to, from, savedPosition) {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve({ top: 0, behavior: 'smooth' })
    }, 300)  // Chờ page transition 300ms
  })
}

Dùng savedPosition để implement proper back/forward scroll restoration — trải nghiệm native-like.

Xem toàn bộ Vue.js cùng filter theo level & chủ đề con.

Mở danh sách Vue.js