41 lines
1.3 KiB
JavaScript
41 lines
1.3 KiB
JavaScript
export default {
|
|
methods: {
|
|
handleHash(namespace, callback, checkAnchor = true) {
|
|
if (!process.client) {
|
|
return;
|
|
}
|
|
|
|
const doHandle = () => {
|
|
const anchor = decodeURIComponent(window.location.hash.substr(1));
|
|
const $anchor = document.getElementById(anchor);
|
|
if (checkAnchor && $anchor) {
|
|
$anchor.scrollIntoView();
|
|
} else if (!namespace) {
|
|
callback(anchor);
|
|
} else if (anchor.startsWith(namespace + '/')) {
|
|
callback(anchor.substring(namespace.length + 1));
|
|
}
|
|
}
|
|
|
|
setTimeout(_ => {
|
|
doHandle();
|
|
window.addEventListener('hashchange', function() {
|
|
doHandle();
|
|
}, false);
|
|
}, 500);
|
|
},
|
|
setHash(namespace, value) {
|
|
if (!process.client) {
|
|
return;
|
|
}
|
|
|
|
history.pushState(
|
|
'',
|
|
document.title,
|
|
window.location.pathname + window.location.search
|
|
+ (value ? '#' + (namespace ? namespace + '/' + value : value) : '')
|
|
);
|
|
},
|
|
}
|
|
}
|