hexo-blog-deploy/js/bookmark.js

57 lines
1.6 KiB
JavaScript

/* global CONFIG */
document.addEventListener('DOMContentLoaded', () => {
'use strict';
const doSaveScroll = () => {
localStorage.setItem('bookmark' + location.pathname, window.scrollY);
};
const scrollToMark = () => {
let top = localStorage.getItem('bookmark' + location.pathname);
top = parseInt(top, 10);
// If the page opens with a specific hash, just jump out
if (!isNaN(top) && location.hash === '') {
// Auto scroll to the position
window.anime({
targets : document.scrollingElement,
duration : 200,
easing : 'linear',
scrollTop: top
});
}
};
// Register everything
const init = function(trigger) {
// Create a link element
const link = document.querySelector('.book-mark-link');
// Scroll event
window.addEventListener('scroll', () => link.classList.toggle('book-mark-link-fixed', window.scrollY === 0), { passive: true });
// Register beforeunload event when the trigger is auto
if (trigger === 'auto') {
// Register beforeunload event
window.addEventListener('beforeunload', doSaveScroll);
document.addEventListener('pjax:send', doSaveScroll);
}
// Save the position by clicking the icon
link.addEventListener('click', () => {
doSaveScroll();
window.anime({
targets : link,
duration: 200,
easing : 'linear',
top : -30,
complete: () => {
setTimeout(() => {
link.style.top = '';
}, 400);
}
});
});
scrollToMark();
document.addEventListener('pjax:success', scrollToMark);
};
init(CONFIG.bookmark.save);
});