172 lines
6.0 KiB
JavaScript
172 lines
6.0 KiB
JavaScript
// 定义pjax 预设pjax
|
||
(function() {
|
||
if (typeof Pjax === 'undefined') {
|
||
console.error('Pjax library is not loaded.');
|
||
return;
|
||
}
|
||
|
||
var pjax = new Pjax({
|
||
// 这里填写页面中改变的部分(和 CSS 选择器用法一样)
|
||
selectors: ["title", "#pjax-container"],
|
||
cacheBust: false,
|
||
elements: "a", // 拦截所有链接
|
||
switches: {
|
||
"#pjax-container": Pjax.switches.default
|
||
}
|
||
});
|
||
|
||
// 将 pjax 实例挂载到 window 以便调试或外部访问
|
||
window.pjax = pjax;
|
||
|
||
console.log("Pjax initialized:", pjax);
|
||
})();
|
||
|
||
// pjax预先加载代码
|
||
function pjax_reload() {
|
||
console.log("Pjax reload triggered");
|
||
// 给pjax容器加入css过渡动画
|
||
// var pjaxContainer = document.getElementById("pjax-container");
|
||
// if (pjaxContainer) pjaxContainer.classList.add("uk-animation-slide-bottom-small");
|
||
|
||
// 评论区过渡动画
|
||
var selectors = [
|
||
".comment-meta",
|
||
".comment-author vcard",
|
||
".comment-metadata",
|
||
".comment-content",
|
||
".reply"
|
||
];
|
||
|
||
selectors.forEach(function(selector) {
|
||
document.querySelectorAll(selector).forEach(function(el) {
|
||
el.setAttribute("uk-scrollspy", "cls: uk-animation-fade; delay: 100");
|
||
});
|
||
});
|
||
|
||
// 说说页面过渡动画
|
||
var shuoshuoBody = document.getElementById("shuoshuo_body");
|
||
if (shuoshuoBody) {
|
||
shuoshuoBody.setAttribute("uk-scrollspy", "target: > .shuoshuo; cls: uk-animation-fade; delay: 250");
|
||
}
|
||
}
|
||
|
||
function refreshHeatmap() {
|
||
if (typeof renderHeatmap === 'function') {
|
||
try {
|
||
renderHeatmap();
|
||
} catch (e) {
|
||
console.error('renderHeatmap error:', e);
|
||
}
|
||
}
|
||
}
|
||
|
||
// pjax发送时期
|
||
document.addEventListener("pjax:send", function () {
|
||
// pjax动画减少圆圈动画
|
||
NProgress.configure({
|
||
showSpinner: false
|
||
});
|
||
// pjax执行动画开始
|
||
NProgress.start(); //加载动画效果开始
|
||
});
|
||
|
||
// Pjax 成功后,重新加载下面的函数
|
||
document.addEventListener("pjax:success", function () {
|
||
// 重载图片懒加载插件的js
|
||
if (typeof lazyLoadInit === 'function') {
|
||
lazyLoadInit({
|
||
// coverColor: "white",
|
||
// coverDiv: "<div style='display: flex; justify-content: center; align-items: center; height: 200px; color: #000000;'><span>优世界·一个记录生活点滴的小站</span></div>",
|
||
offsetBottom: 50,
|
||
offsetTopm: 50,
|
||
showTime: 1100,
|
||
queueInterval: 100
|
||
});
|
||
}
|
||
// 激活文章图片灯箱
|
||
if (window.ViewImage) {
|
||
ViewImage.init('.post-content img');
|
||
}
|
||
|
||
if (typeof window.refreshFloatingTools === 'function') {
|
||
window.refreshFloatingTools();
|
||
}
|
||
});
|
||
|
||
// pjax加载完成
|
||
document.addEventListener("pjax:complete", function () {
|
||
// 立即执行:进度条、基础 UI
|
||
if (typeof NProgress !== 'undefined') NProgress.done();
|
||
pjax_reload();
|
||
|
||
// 动态加载页面特定JS(PJAX适配)
|
||
// 检测当前页面是否为文章详情页,如果是则加载page-only.js
|
||
var currentPath = window.location.pathname;
|
||
var isArticlePage = document.querySelector('#Comments') !== null ||
|
||
document.querySelector('.post-content') !== null;
|
||
|
||
if (isArticlePage && !window._pageOnlyLoaded && window._pageOnlyScriptUrl) {
|
||
// 动态加载page-only.js(使用Hugo fingerprint后的正确URL)
|
||
var script = document.createElement('script');
|
||
script.src = window._pageOnlyScriptUrl;
|
||
script.onload = function() {
|
||
window._pageOnlyLoaded = true;
|
||
console.log('page-only.js loaded for PJAX navigation');
|
||
// 初始化Artalk等
|
||
if (typeof window.initArtalk === 'function') {
|
||
try { window.initArtalk(); } catch(e) { console.error('initArtalk error:', e); }
|
||
}
|
||
if (typeof window.initParagraphComments === 'function') {
|
||
try { window.initParagraphComments(); } catch(e) {}
|
||
}
|
||
};
|
||
document.body.appendChild(script);
|
||
}
|
||
|
||
// 下一帧执行:轻量初始化
|
||
requestAnimationFrame(function() {
|
||
if (typeof initCodeCopy === 'function') initCodeCopy();
|
||
if (typeof window.initSearch === 'function') {
|
||
try { window.initSearch(); } catch(e) {}
|
||
}
|
||
if (typeof window.refreshFloatingTools === 'function') {
|
||
window.refreshFloatingTools();
|
||
} else if (typeof window.initFloatingTools === 'function') {
|
||
try { window.initFloatingTools(); } catch(e) {}
|
||
}
|
||
// 文章动画
|
||
if (typeof window.initPostScrollspy === 'function') window.initPostScrollspy();
|
||
});
|
||
|
||
// 空闲时执行:非关键功能
|
||
var idle = window.requestIdleCallback || function(fn) { return setTimeout(fn, 200); };
|
||
idle(function() {
|
||
if (typeof window.initParagraphComments === 'function') {
|
||
try { window.initParagraphComments(); } catch(e) {}
|
||
}
|
||
if (typeof window.initInfiniteScroll === 'function' && window.enableInfiniteScroll) {
|
||
window.initInfiniteScroll();
|
||
}
|
||
if (typeof window.initLinkStatus === 'function') {
|
||
try { window.initLinkStatus(); } catch(e) {}
|
||
}
|
||
if (typeof window.initArtalk === 'function') {
|
||
try { window.initArtalk(); } catch(e) {}
|
||
}
|
||
if (typeof window.bsz_fetch === 'function') {
|
||
try { window.bsz_fetch(); } catch(e) {}
|
||
}
|
||
if (typeof window.initImageFrameReveal === 'function') {
|
||
try { window.initImageFrameReveal(); } catch(e) {}
|
||
}
|
||
// 链接卡片和中英文间距(DOM 扫描,非关键)
|
||
if (typeof window.initLinkify === 'function') window.initLinkify();
|
||
if (typeof window.initPangu === 'function') window.initPangu();
|
||
});
|
||
|
||
// 延迟:代码折叠
|
||
setTimeout(function() {
|
||
if (typeof window.initCodeFold === 'function') window.initCodeFold();
|
||
}, 300);
|
||
});
|