我会在原有代码基础上新增「回到页首」按钮,并保持代码适配 Typecho 特性,以下是完整的修改后代码,直接替换原有内容即可:

适配 Typecho 的完整代码(含回到页首按钮)

<!-- 第一步:在 header.php 的 </head> 上方插入 CSS 样式 -->
<style>
    /* 顶部跳转按钮样式 - 适配 Typecho 全局样式 */
    .typecho-scroll-btns {
        position: fixed;
        top: 20px;
        right: 20px; /* 靠右显示,避免遮挡 Typecho 原有头部 */
        z-index: 9999; /* 高于 Typecho 其他元素 */
        display: flex;
        gap: 8px;
        padding: 5px;
        background: rgba(255, 255, 255, 0.9);
        border-radius: 8px;
        box-shadow: 0 2px 8px rgba(0,0,0,0.1);
    }
    .typecho-scroll-btn {
        padding: 8px 16px;
        border: none;
        border-radius: 4px;
        background: #4285f4;
        color: #fff;
        font-size: 14px;
        cursor: pointer;
        transition: background 0.3s;
    }
    .typecho-scroll-btn:hover {
        background: #3367d6;
    }
    /* 适配移动端 */
    @media (max-width: 768px) {
        .typecho-scroll-btns {
            top: auto;
            bottom: 20px;
            right: 20px;
            flex-wrap: wrap; /* 移动端按钮换行,避免太宽 */
            justify-content: center;
        }
        .typecho-scroll-btn {
            padding: 6px 12px;
            font-size: 13px;
        }
    }
</style>

<!-- 第二步:在 header.php 的 <body> 标签内插入按钮 HTML(新增回到页首按钮) -->
<div class="typecho-scroll-btns">
    <button class="typecho-scroll-btn" id="toTopBtn">回到页首</button>
    <button class="typecho-scroll-btn" id="toMiddleBtn">跳到中间</button>
    <button class="typecho-scroll-btn" id="toBottomBtn">跳到页尾</button>
</div>

<!-- 第三步:在 header.php 的 </body> 上方插入 JS 脚本(新增回到页首逻辑) -->
<script>
// 等待 DOM 加载完成(适配 Typecho 动态加载)
document.addEventListener('DOMContentLoaded', function() {
    // 获取按钮元素(新增 toTopBtn)
    const toTopBtn = document.getElementById('toTopBtn');
    const toMiddleBtn = document.getElementById('toMiddleBtn');
    const toBottomBtn = document.getElementById('toBottomBtn');

    // 新增:回到页首逻辑
    toTopBtn.addEventListener('click', function() {
        window.scrollTo({
            top: 0, // 页首位置为0
            behavior: 'smooth' // 平滑滚动
        });
    });

    // 跳到页尾
    toBottomBtn.addEventListener('click', function() {
        // 兼容 Typecho 不同主题的页面高度计算
        const pageHeight = Math.max(
            document.body.scrollHeight,
            document.documentElement.scrollHeight
        );
        window.scrollTo({
            top: pageHeight,
            behavior: 'smooth'
        });
    });

    // 跳到中间
    toMiddleBtn.addEventListener('click', function() {
        const pageHeight = Math.max(
            document.body.scrollHeight,
            document.documentElement.scrollHeight
        );
        const middlePos = pageHeight / 2;
        window.scrollTo({
            top: middlePos,
            behavior: 'smooth'
        });
    });

    // 可选:解决 Typecho 无限滚动/动态加载内容的高度误差
    let lastHeight = 0;
    function updatePageHeight() {
        const currentHeight = Math.max(
            document.body.scrollHeight,
            document.documentElement.scrollHeight
        );
        if (currentHeight !== lastHeight) {
            lastHeight = currentHeight;
        }
    }
    // 监听滚动和加载事件,更新页面高度
    window.addEventListener('scroll', updatePageHeight);
    window.addEventListener('load', updatePageHeight);
});
</script>

核心修改点说明

  1. 新增「回到页首」按钮 HTML
    在按钮容器中添加 <button class="typecho-scroll-btn" id="toTopBtn">回到页首</button>,并调整按钮排序(页首→中间→页尾,符合操作习惯)。
  2. 新增回到页首 JS 逻辑
    获取 toTopBtn 元素,点击时滚动到 top: 0(页首的固定位置),保持和其他按钮一致的平滑滚动效果。
  3. 优化移动端适配
    新增 flex-wrap: wrapjustify-content: center,避免移动端按钮一行显示太宽;同时微调按钮内边距和字体大小,提升移动端体验。

额外自定义选项(按需调整)

  1. 修改按钮颜色
    若想区分不同按钮的颜色,可给「回到页首」按钮单独加样式:

    #toTopBtn {
        background: #00c851; /* 绿色 */
    }
    #toTopBtn:hover {
        background: #00b248;
    }
    #toMiddleBtn {
        background: #ffbb33; /* 黄色 */
    }
    #toMiddleBtn:hover {
        background: #ffa800;
    }
  2. 仅在滚动后显示「回到页首」按钮
    若想让「回到页首」按钮仅在页面滚动后显示(更友好),修改 CSS 和 JS:

    #toTopBtn {
        display: none; /* 默认隐藏 */
    }
    // 监听滚动事件,控制按钮显示/隐藏
    window.addEventListener('scroll', function() {
        if (window.scrollY > 300) { // 滚动超过300px时显示
            toTopBtn.style.display = 'block';
        } else {
            toTopBtn.style.display = 'none';
        }
        updatePageHeight(); // 保留原有高度更新逻辑
    });
  3. 调整按钮位置
    若想按钮靠左/居中显示,修改 .typecho-scroll-btnsright: 20px 为:

    • 靠左:left: 20px
    • 居中:left: 50%; transform: translateX(-50%);(需删除原有 right: 20px

测试验证

保存 header.php 后刷新 Typecho 前台:

  1. 能看到三个按钮(回到页首、跳到中间、跳到页尾);
  2. 点击「回到页首」,页面平滑滚动到最顶部;
  3. 移动端访问时按钮自动换行,显示正常;
  4. 滚动页面后(若加了隐藏逻辑),「回到页首」按钮会按需显示/隐藏。

我简化代码,仅保留页尾「回到页首」按钮,复用之前的按钮 CSS 样式,逻辑极简且适配 Typecho,直接复制到 footer.php 即可:

极简版实现代码(Typecho 页尾回到页首按钮)

打开主题目录 usr/themes/你的主题名/footer.php,在 </footer> 标签后、</body> 前插入以下代码:

<!-- 复用原有按钮CSS样式 + 页尾按钮定位 -->
<style>
    /* 复用之前的按钮基础样式 */
    .typecho-scroll-btn {
        padding: 8px 16px;
        border: none;
        border-radius: 4px;
        background: #4285f4;
        color: #fff;
        font-size: 14px;
        cursor: pointer;
        transition: background 0.3s;
    }
    .typecho-scroll-btn:hover {
        background: #3367d6;
    }
    /* 页尾按钮固定定位 */
    .back-to-top-footer {
        margin: 20px auto; /* 页尾居中显示 */
        display: block; /* 独占一行 */
    }
</style>

<!-- 页尾回到页首按钮 -->
<button class="typecho-scroll-btn back-to-top-footer" id="backToTop">回到页首</button>

<!-- 核心JS:点击回到页首 -->
<script>
// 等待页面加载完成
document.addEventListener('DOMContentLoaded', function() {
    // 获取按钮
    const backToTopBtn = document.getElementById('backToTop');
    // 点击事件:平滑回到页首
    backToTopBtn.addEventListener('click', function() {
        window.scrollTo({
            top: 0,
            behavior: 'smooth' // 平滑滚动,想瞬间跳转就删掉这行
        });
    });
});
</script>

核心说明

  1. 样式复用:直接用之前的 .typecho-scroll-btn 样式,仅新增 .back-to-top-footer 控制页尾按钮的排版(居中+独占一行),无需额外写样式;
  2. JS 极简:只有「点击按钮滚动到页首」的核心逻辑,无多余监听、兼容代码,易理解易维护;
  3. 位置适配:按钮默认在页尾居中显示,和页尾其他内容自然衔接。

自定义调整(按需改)

  • 按钮位置:想让按钮靠右/靠左,修改 .back-to-top-footer 的样式:

    /* 靠右显示 */
    .back-to-top-footer {
        margin: 20px 0 20px auto;
    }
    /* 靠左显示 */
    .back-to-top-footer {
        margin: 20px 0;
    }
  • 取消平滑滚动:删掉 JS 里的 behavior: 'smooth',变成瞬间跳转;
  • 按钮颜色:想改颜色,在 .typecho-scroll-btn 里改 background 值即可,比如:

    .typecho-scroll-btn {
        background: #00c851; /* 绿色 */
    }
    .typecho-scroll-btn:hover {
        background: #00b248;
    }

效果验证

保存 footer.php 后刷新页面,滚动到页尾能看到「回到页首」按钮,点击后页面会平滑回到顶部,极简且满足核心需求。

(来自豆包)

标签: none