Fix blur effect, implement skeleton loading, and add Duolingo JWT friend streak feature

This commit is contained in:
User
2026-03-12 15:53:23 +08:00
parent 5c0abfd5da
commit 3eaef5b06a
6 changed files with 4835 additions and 3754 deletions

View File

@@ -161,6 +161,55 @@
<?php wp_footer(); ?>
<!-- 长文章 backdrop-filter 模糊层 JS -->
<script>
(function() {
function initPostFullBlur() {
var card = document.querySelector('article.post.post-full.card');
if (!card) return;
// 创建模糊覆盖层
var overlay = document.createElement('div');
overlay.className = 'post-full-blur-overlay';
card.insertBefore(overlay, card.firstChild);
var ticking = false;
function updateOverlay() {
var cardRect = card.getBoundingClientRect();
// 覆盖层比视口高 800px上下各多 400px充分溢出窗口避免穿帮
// offset = 卡片顶部到视口顶部的距离 - 400px 上方余量
var offset = Math.max(0, -cardRect.top - 400);
// 限制偏移量不超过卡片高度减去覆盖层高度
var overlayHeight = window.innerHeight + 800;
var maxOffset = card.offsetHeight - overlayHeight;
if (maxOffset > 0) {
offset = Math.min(offset, maxOffset);
}
overlay.style.transform = 'translateY(' + offset + 'px)';
ticking = false;
}
function onScroll() {
if (!ticking) {
ticking = true;
requestAnimationFrame(updateOverlay);
}
}
window.addEventListener('scroll', onScroll, { passive: true });
window.addEventListener('resize', onScroll, { passive: true });
// 初始定位
updateOverlay();
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', initPostFullBlur);
} else {
initPostFullBlur();
}
})();
</script>
</body>