-
Notifications
You must be signed in to change notification settings - Fork 4.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Back to top when changing page. #2156
Comments
@mistic100 Great observation. Scroll behavior should not carry over to the next page. For those wanting to see a reproduction of it, I have a screen recording here: |
Just confirming: I can reproduce this on Firefox, but not in Google Chrome or Safari. |
Correct, on Chrome there is an animation that brings the scroll to the top. (I am not a fan of this animation by the way, it is laggy when it's the first load of a page) |
Hi, I confirm that this bug occurs on Firefox 👌 |
Same bug. Any known workaround/hack? I was trying for some time with no luck: afterEach in Vue Router, trying to force timeout with scrollTo 0 but they need user interaction somehow... |
Tested on Chrome, Safari, Firefox, Brave and Edge. Confirmed that the bug is reproduced only on Firefox. |
The scrolling issues on VuePress are driving me absolutely nuts but I think I have figured it out. There is also another issue where Chrome does not scroll to the correct anchor on the first page load which is also fixed by this. Add this to your export default ({ router }) => {
if (typeof process === 'undefined' || process.env.VUE_ENV !== 'server') {
router.onReady(() => {
const { app } = router
app.$once('hook:mounted', () => {
// Fix bullshit Chrome anchor scroll issue on page load
setTimeout(() => {
const { hash } = document.location;
if (hash.length > 1) {
const id = hash.substring(1)
const element = document.getElementById(id)
if (element) element.scrollIntoView()
}
}, 500)
})});
router.afterEach(() => {
// Fix bullshit Firefox scroll to top issue
const { hash } = document.location;
if (!hash.length) {
setTimeout(() => {
document.body.scrollTop = 0;
document.body.parentNode.scrollTop = 0;
document.documentElement.scrollTop = 0;
}, 501);
} else {
const id = hash.substring(1)
const element = document.getElementById(id)
if (element) element.scrollIntoView()
}
});
}
} And the second part to fixing this problem is to actually change the default behavior of Firefox as it differs from the other browsers. We want to use the
As far as I can tell, this solves all the scrolling issues for Chrome and Firefox. Can probably be cleaned up a bit but I just want this basic stuff to work for now and that's my take on that. Maybe someone else has the virtue to clean it up and turn it into a PR, otherwise you can just use this ugly hack. |
Surprisingly all the |
Tested on Chrome and reproduced it. @bencodezen want to check back if i got the bug right :) |
Is this bug issue still open? If yes can I work on it |
I am not experiencing this bug. |
Can i start fixing this issue? |
Bug report
Steps to reproduce
What is expected?
I navigate to the top of the "Getting started" page
What is actually happening?
I navigate to the bottom of the "Getting started" page
Other relevant information
I found a bunch of old issues and PR regarding this problem, #1071 #1075 #1107 #1108 and it looks like there where a lot of back-and-forth.
The current behavior is really anoying when using the documentation I am writing, the back to top plugin make a bit more useable but it will be much better to have a standard navigation (when you change page, you start at the top).
The text was updated successfully, but these errors were encountered: