Files
SHITOUCUO/page-index.php
2026-02-19 13:14:46 +08:00

148 lines
5.6 KiB
PHP

<?php
/**
* 主页
* @package custom
**/
if (!defined("__TYPECHO_ROOT_DIR__")) {
exit();
}
// 在输出任何HTML之前添加主题检测脚本
echo '<script>
// 在页面加载前立即设置主题,避免闪烁
(function() {
const theme = localStorage.theme || (window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light");
if (theme === "dark" || (!localStorage.theme && window.matchMedia("(prefers-color-scheme: dark)").matches)) {
document.documentElement.classList.add("dark");
} else {
document.documentElement.classList.remove("dark");
}
})();
</script>';
?>
<!DOCTYPE html>
<html lang="zh">
<?php $this->need("header.php"); ?>
<style>
/* 只添加必要的过渡效果,避免闪烁 */
body, .jasmine-container, .top, .tepasspost, #bber-talk {
transition: background-color 0.3s ease, color 0.3s ease;
}
label.flex.flex-row{height:54px;width:56px!important;margin-bottom:-20px!important;}
.cat-search{padding: .4rem 1rem .3rem!important;border-radius: 9999px;}
/* 添加一个加载状态样式 */
#bber-talk.loading {
min-height: 60px;
display: flex;
align-items: center;
justify-content: center;
}
#bber-talk .loading-text {
opacity: 0.7;
font-size: 0.9em;
}
</style>
<?php $this->need('assets/lantern.html'); ?>
<body class="jasmine-body" style="margin-top:5rem;">
<div class="jasmine-container grid grid-cols-12">
<div class="flex col-span-12 lg:col-span-8 flex-col lg:border-x-2 border-stone-100 dark:border-neutral-600 lg:pt-0 lg:px-6 pb-10 px-3">
<?php if (Typecho_Widget::widget('Widget_User')->hasLogin()){?>
<?php $this->need("component/menu.php"); ?>
<?php $this->need("component/post-top.php"); ?>
<div id="bber-talk" class="loading">
<!-- 加载中的占位符,数据加载完成后会被替换 -->
<div class="loading-text">加载中...</div>
</div>
<?php } ?>
<?php if (!Typecho_Widget::widget('Widget_User')->hasLogin()){?>
<div class="tepasspost">
<div class="tp" style="margin:140px auto;">
<span class="tips"><i class="iconfont icon-suo"></i></span>
<span class="tips">已进入私人领地,请登录再浏览阅读<!--,石头厝仅接受主动邀请(免费)和订阅(付费)两种方式招募会员,付费订阅请先阅读政策:<a href="https://www.shitoucuo.com/dingyue.html" style="text-decoration:underline;color: #f15a22;" target="_blank">成为会员</a></strong>-->
<div class="tips"><a class="btn" target="_blank" href="/xige">登录</a> </div>
</div>
</div>
<?php } ?>
</div>
</div>
<div class="flex grow flex-col justify-between top" style="top:22em;">
<ul class="flex flex-col flex-wrap content-center gap-y-2 ">
<li class="relative nav-li">
<button onclick="jasmine.switchDark()" title="日夜模式">
<iconify-icon icon="<?php echo getOptionValueOrDefault("switchDarkIconPhone", "tabler:sun-moon"); ?>"
class="rounded px-2 py-1 text-2xl jasmine-primary-bg-hover btop"></iconify-icon>
</button>
</li>
</ul>
</div>
<script>
document.addEventListener("DOMContentLoaded", () => {
var bbUrl = "https://me.sangushui.com/api/v1/memo?creatorId=1&rowStatus=NORMAL&limit=6";
var bbDom = document.querySelector('#bber-talk');
// 使用 async/await 简化代码
async function loadBberTalk() {
try {
const response = await fetch(bbUrl);
const resdata = await response.json();
const data = resdata.slice(0, 5); // 只取前5条数据
let result = '';
for (let i = 0; i < data.length; i++) {
const bbTime = new Date(data[i].createdTs * 1000).toLocaleString();
let bbCont = data[i].content;
const newbbCont = bbCont
.replace(/!\[.*?\]\((.*?)\)/g, ' <a href="$1" target="_blank">🌅</a> ')
.replace(/\[(.*?)\]\((.*?)\)/g, ' <a href="$2" target="_blank">$1 🔗</a> ');
result += `<li class="item" style="text-align:center;"><span class="datetime">${bbTime} </span>${newbbCont}</li>`;
}
// 构建完整的HTML结构
const bbBefore = `<i class="iconfont icon-tengxunweibo"></i><ul class="talk-list" onclick="window.open('https://me.xgsd.cc/u/xige', '_blank')">`;
const bbAfter = `</ul><i class="iconfont icon-fangxiang_round"></i>`;
const resultAll = bbBefore + result + bbAfter;
// 一次性替换整个容器内容
bbDom.innerHTML = resultAll;
bbDom.classList.remove('loading'); // 移除加载样式
// 循环滚动 - 修复版本
const startScroll = () => {
const list = document.querySelector(".talk-list");
if (!list) return;
// 检查是否有足够的项目进行滚动
if (list.children.length < 2) return;
// 使用setInterval持续滚动
setInterval(() => {
// 每次重新获取第一个子元素
const firstItem = list.firstElementChild;
if (firstItem) {
// 将第一个元素移动到列表末尾
list.appendChild(firstItem);
}
}, 2000);
};
// 确保DOM已更新后开始滚动
setTimeout(startScroll, 0);
} catch (error) {
console.error('加载说说数据失败:', error);
bbDom.innerHTML = '<div class="error-text">加载失败,请刷新页面</div>';
bbDom.classList.remove('loading');
}
}
// 开始加载数据
loadBberTalk();
});
</script>
</body>
</html>