-
Notifications
You must be signed in to change notification settings - Fork 690
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
Handling onpage hash links #586
Comments
Any input on this? |
Still nothing? |
The project is dead. For those with the same issue, you can:
<span class="api-link" data-href="{url}">{label}</span>
// We need to override the click handler that would otherwise have been defined by page.js,
// so that we can fine-tune the behavior
$(document.body).on('click', 'a', function(e) {
// "api-link" links don't need to be handled here, it's just to show the reason for using {click: false}
if ($(this).attr('href').charAt(0) === '#' || $(this).hasClass('api-link')) {
// same-page anchors DO need to be handled here though, because they would pushstate,
// and then page.js would execute yet again the route callback of the page we're on...
// we need to prevent that: disable page.js just for a tiny moment
page.stop();
setTimeout(page.start.bind(page, {click: false, dispatch: false}), 100);
}
return true;
}); It works for me as it is, but there might of course be room for improvement. Feel free to improve this! 😉👍 |
Another issue I encountered right after: There is a bug in page.js that does not reset Just be sure to modify this._running = true;
// Execute this AFTER setting _running back to true, otherwise the stop() method won't work properly
if (false === opts.dispatch) return; |
I don't think your original issue is caused by page.js intercepting click events on links. Looking at the page.js source, there's no reason to believe that the click handlers were installed if you specified page((ctx, next) => {
// find the index of the hashbang defined by page.js
let hashIdx = ctx.pathname.indexOf("#!");
// check for additional hash marks
if (ctx.pathname.includes("#", hashIdx + 2)) {
doSomethingElse(ctx.pathname); // dispatch the link to a custom handler
return; // early return prevents page.js from continuing the dispatch operation
}
next();
}); Now, with that being said, URLs containing multiple levels of fragment identifiers are not compliant with the current web standards. You have to remember that specifying |
Hi,
I am having trouble with simple hash links :
<a href="#my-section">link</a>
I specified
{click: false}
in the Page.js options, because there are some links I do not want handled by Page.js.However, in my click handler, I detect the hashtag, and I
return true
(using jQuery) so that the browser updates the URL and scrolls to the section with that ID.In that scenario, I am not calling
page($this.attr('href'))
like I do for "normal" links.Strangely enough, it seems that Page.js still intercepts that link (or that change of URL) and matches the route again, which causes a "reload" (SPA-like) of my page.
How should I handle onpage hash links?
The text was updated successfully, but these errors were encountered: