子比主题-右侧悬浮导航-饺子美化版
饺子

子比主题-右侧悬浮导航-饺子美化版

blogger头像
blogger 博主
2026.05.15 · 约 130 分钟 · 0 评论 · 0 喜爱

右侧悬浮导航使用教程 饺子美化 这是一个功能丰富的WordPress右侧悬浮导航栏,提供快捷的页面操作和营销推广功能。 ### ✨ 主要特性 - 🎯 固定在页面右侧,不随页面滚动消失 - 🎨 精美的渐变设计和动画效果 -…

右侧悬浮导航使用教程 饺子美化

这是一个功能丰富的WordPress右侧悬浮导航栏,提供快捷的页面操作和营销推广功能。

### ✨ 主要特性

- 🎯 固定在页面右侧,不随页面滚动消失

- 🎨 精美的渐变设计和动画效果

- ⚙️ 管理员可自定义各项参数

- 💾 设置自动保存到浏览器本地存储

- 📱 已移除手机端显示(桌面端专用)

---

## 安装使用

### 方法一: 直接集成到WordPress主题

1. **打开主题文件**

   - 找到主题的 `footer.php` 文件

   - 在 `</body>` 标签之前插入代码

导航按钮功能

### 1️⃣ 管理员设置按钮 🛠️

**位置**: 最上方(橙色按钮)  

**功能**: 打开设置弹窗,自定义导航栏各项参数  

**显示条件**:

- 仅管理员可见

- 仅在文章页和页面页显示

- 需要 `current_user_can('manage_options')` 权限

**图标**: `fa-cog` (齿轮图标)

---

### 2️⃣ VIP会员按钮 💎

**位置**: 第二个(蓝色渐变按钮)  

**功能**: 展示VIP会员信息和购买入口  

**特效**:

- 脉冲动画效果(三个同心圆扩散)

- 悬停显示VIP信息面板

**面板内容**:

- VIP价格: ¥118 (原价 ¥298)

- 会员权益:

  - 微信QQ客服一对一

  - 源码永久免费升级

  - 大量专属精品源码

  - 免费下载全站资源

- 购买按钮跳转链接

**可自定义项**:

- 图标样式

- VIP价格

- 原价

- 开通链接

---

### 3️⃣ 每日签到按钮 📅

**位置**: 第三个(白色按钮)  

**功能**: 用户每日签到获取积分  

**交互**: 点击触发签到功能  

**可自定义项**:

- 图标样式

- 签到链接

- 提示文字

---

### 4️⃣ 在线客服按钮 💬

**位置**: 第四个(白色按钮)  

**功能**: 打开在线客服对话窗口  

**特效**: 右上角显示"在线"状态徽章(绿色脉冲动画)  

**可自定义项**:

- 图标样式

- 状态文字(在线/离线)

- 提示文字

---

### 5️⃣ 打赏按钮 🎁

**位置**: 第五个(白色按钮)  

**功能**: 跳转到打赏页面  

**交互**: 点击在新窗口打开打赏页面  

**可自定义项**:

- 图标样式

- 打赏页面链接

- 提示文字

---

### 6️⃣ 公众号二维码 📱

**位置**: 第六个(白色按钮)  

**功能**: 展示公众号二维码  

**交互**: 鼠标悬停显示二维码面板  

**可自定义项**:

- 图标样式

- 二维码图片URL

- 标题文字

- 描述文字

- 提示文字

---

### 7️⃣ 全屏按钮 🔳

**位置**: 第七个(白色按钮)  

**功能**: 切换浏览器全屏模式  

**交互**:

- 点击进入/退出全屏

- 图标动态切换(展开/压缩)

- 提示文字动态更新

**自动检测**:

- 进入全屏: 图标变为 `fa-compress`,提示"退出全屏"

- 退出全屏: 图标变为 `fa-expand`,提示"展开全屏"

---

### 8️⃣ 返回顶部 ⬆️

**位置**: 最下方(蓝色渐变按钮)  

**功能**: 平滑滚动到页面顶部  

**显示逻辑**:

- 页面滚动超过300px时显示

- 页面在顶部时自动隐藏

**动画效果**: 淡入淡出 + 平滑滚动

---

## 设置弹窗教程

### 打开设置弹窗

1. 以管理员身份登录WordPress

2. 访问任意文章页或页面

3. 点击右侧导航最上方的橙色"页面设置"按钮

### 设置界面说明

#### 📅 签到按钮设置

```

┌─────────────────────────────────┐

│ 图标类名: fa-calendar-check-o   │

│ 链接地址: javascript:;          │

│ 提示文字: 每日签到              │

└─────────────────────────────────┘

```

#### 💬 在线客服设置

```

┌─────────────────────────────────┐

│ 图标类名: fa-comments-o         │

│ 状态文字: 在线                  │

│ 提示文字: 在线客服              │

└─────────────────────────────────┘

```

#### 🎁 打赏按钮设置

```

┌─────────────────────────────────┐

│ 图标类名: fa-gift               │

│ 链接地址: /dashang              │

│ 提示文字: 打赏我们              │

└─────────────────────────────────┘

```

#### 📱 二维码设置

```

┌─────────────────────────────────┐

│ 图标类名: fa-qrcode             │

│ 二维码图片URL: [图片地址]       │

│ 二维码标题: 扫码关注公众号      │

│ 二维码描述: 获取更多最新源码    │

│ 提示文字: 公众号二维码          │

└─────────────────────────────────┘

```

#### 💎 VIP按钮设置

```

┌─────────────────────────────────┐

│ 图标类名: fa-diamond            │

│ VIP价格: ¥118                   │

│ 原价: ¥298                      │

│ 开通链接: /vip-2                │

└─────────────────────────────────┘

```

### 保存设置

1. 修改完参数后,点击右上角"保存设置"按钮

2. 系统会自动:

   - 更新页面显示

   - 保存到浏览器 localStorage

   - 显示"设置保存成功"提示

### 取消设置

- 点击"取消"按钮或弹窗外部区域

- 按 `ESC` 键关闭弹窗

- 关闭后不保存任何修改

---

## 常用图标类名参考

### Font Awesome 图标库

导航使用 Font Awesome 图标,常用图标类名:

| 图标 | 类名 | 说明 |

|------|------|------|

| 🏠 | `fa-home` | 首页 |

| 💎 | `fa-diamond` | VIP/钻石 |

| 📅 | `fa-calendar` | 日历 |

| ✅ | `fa-check-circle` | 签到 |

| 💬 | `fa-comments` | 评论/客服 |

| 🎁 | `fa-gift` | 礼物/打赏 |

| 📱 | `fa-qrcode` | 二维码 |

| ⚙️ | `fa-cog` | 设置 |

| ⬆️ | `fa-arrow-up` | 返回顶部 |

| 🔳 | `fa-expand` | 全屏展开 |

| 🔲 | `fa-compress` | 全屏退出 |

| 🎨 | `fa-paint-brush` | 主题 |

| 👤 | `fa-user` | 用户 |

| ❤️ | `fa-heart` | 收藏 |

| ⭐ | `fa-star` | 星标 |

| 📧 | `fa-envelope` | 邮件 |

| 📞 | `fa-phone` | 电话 |

查找更多图标

访问 [Font Awesome 官网](https://fontawesome.com/icons) 查找更多图标

[hidecontent type="reply"]
<!-- 右侧悬浮导航 - 完全修复版(已删除手机端功能) -->
<style>
:root {
    --primary-color: #3b82f6;
    --primary-hover: #2563eb;
    --text-primary: #334155;
    --text-secondary: #64748b;
    --bg-light: #f8fafc;
    --shadow-sm: 0 2px 8px rgba(0,0,0,.05);
    --shadow-md: 0 5px 15px rgba(0,0,0,.08);
    --btn-gradient: linear-gradient(145deg, #ffffff, #f5f5f5);
    --btn-hover-gradient: linear-gradient(145deg, #f8fafc, #eff6ff);
}

.comfortable-nav{
    position:fixed;
    right:20px;
    top:50%;
    transform:translateY(-50%);
    z-index:9999;
    display:none;
    flex-direction:column;
    gap:12px;
    padding:10px 0;
    will-change: opacity;
}

/* 桌面端显示导航栏 */
@media (min-width: 768px) {
    .comfortable-nav {
        display: flex !important;
    }
}

.nav-item{
    width:52px;
    height:52px;
    border-radius:18px;
    background: var(--btn-gradient);
    box-shadow:var(--shadow-sm);
    display:flex;
    align-items:center;
    justify-content:center;
    cursor:pointer;
    position:relative;
    transition:transform .2s ease, box-shadow .2s ease;
    border: 1px solid #f0f0f0;
    background-image: radial-gradient(circle at 10% 10%, rgba(255,255,255,0.8) 0%, rgba(245,245,245,0.1) 100%);
    will-change: transform;
}

.nav-item:hover{
    background: var(--btn-hover-gradient);
    transform:translateX(-6px) translateY(-2px);
    box-shadow:0 6px 16px rgba(0,0,0,.1);
    border-color: rgba(59, 130, 246, 0.2);
}

.comfortable-nav .nav-item.service-item {
    width:52px !important;
    height:52px !important;
    border-radius:18px !important;
    background: linear-gradient(145deg, #ffffff, #f5f5f5) !important;
    background-image: radial-gradient(circle at 10% 10%, rgba(255,255,255,0.8) 0%, rgba(245,245,245,0.1) 100%) !important;
    border: 1px solid #f0f0f0 !important;
    box-shadow:0 2px 8px rgba(0,0,0,.05) !important;
    margin: 0 !important;
    padding: 0 !important;
}

.comfortable-nav .nav-item.service-item:hover {
    background: var(--btn-hover-gradient) !important;
    transform:translateX(-6px) translateY(-2px) !important;
    box-shadow:0 6px 16px rgba(0,0,0,.1) !important;
    border-color: rgba(59, 130, 246, 0.2) !important;
}

.nav-icon{
    font-size:22px;
    color:var(--text-secondary);
    transition:color .15s ease;
}

.nav-item:hover .nav-icon{
    color:var(--primary-color);
}

.nav-tooltip{
    position:absolute;
    right:60px;
    top:50%;
    transform:translateY(-50%);
    background-color:var(--text-primary);
    color:#fff;
    padding:8px 16px;
    border-radius:10px;
    font-size:13px;
    white-space:nowrap;
    opacity:0;
    pointer-events:none;
    transition:opacity .15s ease;
    box-shadow:0 4px 12px rgba(0,0,0,.12);
}

.nav-tooltip::after{
    content:'';
    position:absolute;
    top:50%;
    right:-4px;
    transform:translateY(-50%);
    width:8px;
    height:8px;
    background-color:var(--text-primary);
    transform: translateY(-50%) rotate(45deg);
}

.nav-item:hover .nav-tooltip{
    opacity:1;
    right:58px;
}

.vip-item-right{
    width:56px;
    height:56px;
    border-radius:18px;
    background: linear-gradient(135deg, var(--primary-color), #60a5fa);
    position:relative;
    box-shadow:0 8px 20px rgba(59,130,246,.35);
    z-index:2;
    border:none;
    background-image: none;
}

.vip-item-right .nav-icon{
    color:#fff;
    font-size:24px;
    position:relative;
    z-index:2;
}

.vip-pulse{
    position:absolute;
    width:100%;
    height:100%;
    border-radius:18px;
    background-color:rgba(59,130,246,.4);
    animation:pulse 2s infinite ease-in-out;
    z-index:1;
    will-change: transform, opacity;
}

@keyframes pulse{
    0%{transform:scale(1);opacity:1}
    100%{transform:scale(2);opacity:0}
}

.vip-panel{
    position:absolute;
    right:75px;
    top:50%;
    transform:translateY(-50%);
    background-color:#fff;
    border-radius:14px;
    box-shadow:var(--shadow-md);
    width:290px;
    padding:22px;
    opacity:0;
    pointer-events:none;
    transition:opacity .15s ease, transform .15s ease;
}

.vip-panel::after{
    content:'';
    position:absolute;
    top:50%;
    right:-8px;
    transform:translateY(-50%) rotate(45deg);
    width:16px;
    height:16px;
    background-color:#fff;
    box-shadow:3px -3px 8px rgba(0,0,0,.08);
    z-index:-1;
}

.vip-item-right:hover .vip-panel{
    opacity:1;
    pointer-events:all;
    transform: translateY(-50%) translateX(-8px);
}

.vip-panel h4{
    color:var(--text-primary);
    font-size:17px;
    margin-bottom:14px;
    font-weight:600;
    display:flex;
    align-items:center;
    gap:8px;
}

.vip-benefits{margin-bottom:20px}

.vip-benefit{
    display:flex;
    align-items:center;
    gap:10px;
    font-size:14px;
    color:var(--text-secondary);
    margin-bottom:10px;
    padding:4px 0;
}

.vip-benefit i{
    color:var(--primary-color);
    font-size:16px;
}

.vip-pricing{
    background-color:var(--bg-light);
    border-radius:12px;
    padding:16px;
    margin-bottom:20px;
    border:1px solid rgba(59,130,246,0.1);
}

.vip-price .current{
    font-size:24px;
    font-weight:700;
    color:var(--primary-color);
}

.vip-price .original{
    font-size:14px;
    color:var(--text-secondary);
    text-decoration:line-through;
    margin-left:8px;
}

.vip-period{
    font-size:13px;
    color:var(--text-secondary);
    margin-top:4px;
}

.vip-cta{
    width:100%;
    padding:12px 0;
    background: linear-gradient(135deg, var(--primary-color), var(--primary-hover));
    color:#fff;
    border:none;
    border-radius:10px;
    font-size:15px;
    font-weight:600;
    cursor:pointer;
    transition:transform .15s ease, box-shadow .15s ease;
    display:flex;
    align-items:center;
    justify-content:center;
    gap:8px;
    text-decoration:none;
    box-shadow:0 4px 12px rgba(59,130,246,.2);
}

.vip-cta:hover{
    transform:translateY(-2px);
    box-shadow:0 6px 16px rgba(59,130,246,.3);
    color:#fff;
}

.qrcode-panel{
    position:absolute;
    right:70px;
    top:50%;
    transform:translateY(-50%);
    background-color:#fff;
    border-radius:14px;
    box-shadow:var(--shadow-md);
    width:230px;
    padding:22px;
    text-align:center;
    opacity:0;
    pointer-events:none;
    transition:opacity .15s ease, transform .15s ease;
}

.qrcode-panel::after{
    content:'';
    position:absolute;
    top:50%;
    right:-8px;
    transform:translateY(-50%) rotate(45deg);
    width:16px;
    height:16px;
    background-color:#fff;
    box-shadow:3px -3px 8px rgba(0,0,0,.08);
    z-index:-1;
}

.nav-item:hover .qrcode-panel{
    opacity:1;
    pointer-events:all;
    transform: translateY(-50%) translateX(-8px);
}

.qrcode-container{
    background-color:#fff;
    border-radius:12px;
    padding:14px;
    display:inline-block;
    box-shadow:var(--shadow-sm);
    margin-bottom:16px;
    border:1px solid rgba(0,0,0,0.05);
}

.qrcode-img{
    width:140px;
    height:140px;
    border-radius:8px;
}

.qrcode-title{
    color:var(--text-primary);
    font-size:15px;
    font-weight:600;
    margin-bottom:8px;
}

.qrcode-desc{
    color:var(--text-secondary);
    font-size:13px;
}

.service-item{position:relative}

.service-status{
    position:absolute;
    top:-4px !important;
    right:-4px !important;
    background-color:#10b981;
    color:#fff;
    font-size:11px;
    padding:2px 6px !important;
    border-radius:14px;
    font-weight:600;
    white-space:nowrap;
    z-index:2;
    animation:pulseOnline 2s infinite;
    box-shadow:0 2px 6px rgba(16,185,129,.2);
}

@keyframes pulseOnline{
    0%{box-shadow:0 0 0 0 rgba(16,185,129,.5)}
    70%{box-shadow:0 0 0 8px rgba(16,185,129,0)}
    100%{box-shadow:0 0 0 0 rgba(16,185,129,0)}
}

.backtop-item{
    border-radius:18px;
    background: linear-gradient(135deg, var(--primary-color), var(--primary-hover));
    opacity:0;
    visibility:hidden;
    transition:opacity .15s ease;
    border-color:transparent;
    background-image: none;
}

.backtop-item .nav-icon{color:#fff}

.backtop-item:hover{
    background: linear-gradient(135deg, var(--primary-hover), #1d4ed8);
    border-color:transparent;
}

.backtop-item.visible{
    opacity:1;
    visibility:visible;
}

.checkin-link,.service-button{
    display:flex;
    align-items:center;
    justify-content:center;
    width:100%;
    height:100%;
    position:relative;
    text-decoration:none;
    border-radius: inherit;
    border: none !important;
    background: transparent !important;
    padding: 0 !important;
    margin: 0 !important;
}

.fullscreen-item.active{
    background: var(--btn-hover-gradient);
    border-color: rgba(59, 130, 246, 0.3);
}

/* 管理员设置按钮 */
.admin-settings-item {
    background: linear-gradient(145deg, #f59e0b, #f97316) !important;
    border-color: rgba(249, 115, 22, 0.2) !important;
    display: none !important;
}

.admin-settings-item .nav-icon {
    color: #fff !important;
}

.admin-settings-item:hover {
    background: linear-gradient(145deg, #f97316, #ea580c) !important;
    border-color: rgba(234, 88, 12, 0.3) !important;
}

.admin-settings-item.show-admin {
    display: flex !important;
}

/* 弹窗样式 */
.settings-modal {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: rgba(0, 0, 0, 0.15);
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 99999;
    opacity: 0;
    pointer-events: none;
    transition: opacity .2s ease;
}

.settings-modal.active {
    opacity: 1;
    pointer-events: all;
}

.settings-modal-content {
    background: linear-gradient(135deg, #ffffff 0%, #f1f5f9 100%);
    border-radius: 28px;
    width: 95%;
    max-width: 960px;
    max-height: 90vh;
    overflow-y: auto;
    overflow-x: hidden;
    padding: 0;
    box-shadow: 0 30px 80px rgba(0, 0, 0, 0.4), 0 0 100px rgba(59, 130, 246, 0.15);
    transform: translateY(40px) scale(0.95);
    transition: transform .2s ease;
    position: relative;
}

.settings-modal.active .settings-modal-content {
    transform: translateY(0) scale(1);
}

.settings-modal-content::-webkit-scrollbar {
    width: 10px;
    position: absolute;
    right: 0;
}

.settings-modal-content::-webkit-scrollbar-track {
    background: linear-gradient(180deg, #f1f5f9 0%, #e2e8f0 100%);
    border-radius: 10px;
    margin: 8px 0;
}

.settings-modal-content::-webkit-scrollbar-thumb {
    background: linear-gradient(180deg, 
        #ff6b6b 0%, 
        #ffa500 16%, 
        #ffd700 32%, 
        #4ecdc4 48%, 
        #45b7d1 64%, 
        #9b59b6 80%, 
        #ff6b9d 100%
    );
    border-radius: 10px;
    border: 2px solid #f1f5f9;
    box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
}

.settings-modal-content::-webkit-scrollbar-thumb:hover {
    background: linear-gradient(180deg, 
        #ff5252 0%, 
        #ff9800 16%, 
        #ffc107 32%, 
        #26a69a 48%, 
        #2196f3 64%, 
        #8e24aa 80%, 
        #e91e63 100%
    );
    box-shadow: 0 0 15px rgba(0, 0, 0, 0.15);
}

.settings-modal-header {
    background: linear-gradient(135deg, #667eea 0%, #764ba2 50%, #f093fb 100%);
    padding: 16px 28px;
    border-radius: 28px 28px 0 0;
    position: relative;
    overflow: hidden;
    display: flex;
    align-items: center;
    justify-content: space-between;
}

.settings-modal-header::before {
    content: '';
    position: absolute;
    top: -100%;
    right: -100%;
    width: 200%;
    height: 200%;
    background: radial-gradient(circle, rgba(255,255,255,0.2) 0%, transparent 60%);
    animation: shimmer 3s ease-in-out infinite;
}

@keyframes shimmer {
    0%, 100% { transform: translate(0, 0); }
    50% { transform: translate(-20%, -20%); }
}

.settings-modal-title {
    font-size: 20px;
    font-weight: 800;
    color: #fff;
    display: flex;
    align-items: center;
    gap: 10px;
    text-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
    position: relative;
    z-index: 1;
}

.settings-modal-title i {
    font-size: 22px;
    animation: spin 4s linear infinite;
}

@keyframes spin {
    0% { transform: rotate(0deg); }
    100% { transform: rotate(360deg); }
}

.settings-modal-close {
    position: absolute;
    top: 12px;
    right: 20px;
    background: rgba(255, 255, 255, 0.25);
    border: 2px solid rgba(255, 255, 255, 0.4);
    font-size: 18px;
    color: #fff;
    cursor: pointer;
    width: 36px;
    height: 36px;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    transition: all 0.2s ease;
}

.settings-modal-close:hover {
    background: rgba(255, 255, 255, 0.4);
    border-color: rgba(255, 255, 255, 0.6);
    transform: translateY(-50%) rotate(90deg) scale(1.15);
}

/* 头部按钮容器 */
.settings-modal-actions {
    display: flex;
    align-items: center;
    gap: 12px;
    position: relative;
    z-index: 1;
    margin-right: 60px;
}

.settings-modal-body {
    padding: 20px 28px;
    background: linear-gradient(to bottom, #f8fafc 0%, #ffffff 100%);
    overflow: hidden;
}

.settings-card {
    background: linear-gradient(135deg, #ffffff 0%, #fafbfc 100%);
    border-radius: 20px;
    padding: 20px;
    border: 2px solid transparent;
    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.06);
    position: relative;
    overflow: hidden;
}

.settings-card::before {
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    height: 4px;
    background: linear-gradient(90deg, #667eea, #764ba2, #f093fb);
    opacity: 0.8;
}

/* 设置项分组容器 */
.settings-section {
    margin-bottom: 16px;
    padding-bottom: 12px;
    border-bottom: 2px solid #f1f5f9;
}

.settings-section:last-child {
    margin-bottom: 0;
    padding-bottom: 0;
    border-bottom: none;
}

.settings-section-title {
    font-size: 16px;
    font-weight: 700;
    color: #1e293b;
    margin-bottom: 12px;
    display: flex;
    align-items: center;
    gap: 8px;
}

.settings-section-title i {
    width: 32px;
    height: 32px;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: 8px;
    font-size: 16px;
}

.settings-section:nth-child(1) .settings-section-title i {
    background: linear-gradient(135deg, #10b981, #34d399);
    color: #fff;
}

.settings-section:nth-child(2) .settings-section-title i {
    background: linear-gradient(135deg, #3b82f6, #60a5fa);
    color: #fff;
}

.settings-section:nth-child(3) .settings-section-title i {
    background: linear-gradient(135deg, #f59e0b, #fbbf24);
    color: #fff;
}

.settings-section:nth-child(4) .settings-section-title i {
    background: linear-gradient(135deg, #8b5cf6, #a78bfa);
    color: #fff;
}

.settings-section:nth-child(5) .settings-section-title i {
    background: linear-gradient(135deg, #ec4899, #f472b6);
    color: #fff;
}

/* 设置项网格布局 */
.settings-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 12px;
}

/* VIP单行横排布局 */
.settings-grid.vip-grid {
    display: flex;
    gap: 12px;
    flex-wrap: nowrap;
    overflow: visible;
}

.settings-grid.vip-grid .settings-form-group {
    flex: 1;
    min-width: 0;
}

.settings-form-group {
    margin-bottom: 0;
}

.settings-form-label {
    display: block;
    font-size: 12px;
    color: #475569;
    margin-bottom: 6px;
    font-weight: 600;
}

.settings-form-input {
    width: 100%;
    padding: 8px 12px;
    border: 2px solid #e2e8f0;
    border-radius: 10px;
    font-size: 13px;
    color: #334155;
    transition: border-color .15s ease;
    background: #fff;
}

.settings-form-input:focus {
    outline: none;
    border-color: #667eea;
}

.settings-btn {
    padding: 10px 20px;
    border-radius: 12px;
    font-size: 14px;
    font-weight: 600;
    cursor: pointer;
    transition: all 0.2s ease;
    border: 2px solid transparent;
    display: flex;
    align-items: center;
    gap: 8px;
    white-space: nowrap;
}

.settings-btn-cancel {
    background: rgba(255, 255, 255, 0.15);
    color: #fff;
    border: 2px solid rgba(255, 255, 255, 0.3);
    backdrop-filter: blur(10px);
}

.settings-btn-cancel:hover {
    background: rgba(255, 255, 255, 0.25);
    border-color: rgba(255, 255, 255, 0.5);
    transform: translateY(-2px);
}

.settings-btn-save {
    background: rgba(255, 255, 255, 0.95);
    color: #667eea;
    border: 2px solid rgba(255, 255, 255, 0.5);
    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
}

.settings-btn-save:hover {
    transform: translateY(-2px);
    box-shadow: 0 6px 16px rgba(0, 0, 0, 0.2);
    background: #fff;
}

@media (max-width: 768px) {
    .settings-modal-body {
        padding: 16px;
    }
    .settings-modal-header {
        padding: 16px 20px;
        flex-wrap: wrap;
    }
    .settings-modal-actions {
        margin-right: 50px;
        gap: 8px;
    }
    .settings-card {
        padding: 16px;
    }
    .settings-grid {
        grid-template-columns: 1fr;
        gap: 10px;
    }
    .settings-grid.vip-grid {
        flex-wrap: nowrap;
        overflow-x: auto;
        -webkit-overflow-scrolling: touch;
    }
    .settings-grid.vip-grid .settings-form-group {
        min-width: 140px;
    }
    .settings-form-input {
        padding: 10px 12px;
        font-size: 12px;
    }
    .settings-btn {
        padding: 8px 16px;
        font-size: 13px;
    }
}
</style>

<!-- 导航HTML -->
<div class="comfortable-nav">
    <!-- 管理员设置按钮 - 通过PHP控制显示 -->
    <?php if (current_user_can('manage_options') && (is_single() || is_page())): ?>
    <div class="nav-item admin-settings-item show-admin" id="adminSettingsBtn">
        <i class="fa fa-cog nav-icon"></i>
        <span class="nav-tooltip">页面设置</span>
    </div>
    <?php endif; ?>

    <!-- VIP按钮 -->
    <div class="nav-item vip-item-right">
        <div class="vip-pulse"></div>
        <div class="vip-pulse"></div>
        <div class="vip-pulse"></div>
        <i class="fa fa-diamond nav-icon"></i>
        <div class="vip-panel">
            <h4><i class="fa fa-diamond"></i> 永久会员新春钜惠</h4>
            <div class="vip-benefits">
                <div class="vip-benefit"><i class="fa fa-check-circle"></i><span>微信QQ客服一对一</span></div>
                <div class="vip-benefit"><i class="fa fa-check-circle"></i><span>源码永久免费升级</span></div>
                <div class="vip-benefit"><i class="fa fa-check-circle"></i><span>大量专属精品源码</span></div>
                <div class="vip-benefit"><i class="fa fa-check-circle"></i><span>免费下载全站资源</span></div>
            </div>
            <div class="vip-pricing">
                <div class="vip-price">
                    <span class="current">¥118</span>
                    <span class="original">¥298</span>
                </div>
                <div class="vip-period">永久会员 · 立省180元</div>
            </div>
            <a href="/vip-2" class="vip-cta"><i class="fa fa-rocket"></i> 立即开通</a>
        </div>
    </div>

    <!-- 签到按钮 -->
    <div class="nav-item">
        <a class="initiate-checkin my-custom-checkin checkin-link" href="javascript:;" form-action="user_checkin" id="checkinLink">
            <i class="fa fa-calendar-check-o nav-icon" id="checkinIcon"></i>
            <span class="nav-tooltip" id="checkinTooltip">每日签到</span>
        </a>
    </div>

    <!-- 在线客服 -->
    <div class="nav-item service-item">
        <button data-height="550" data-remote="/wp-admin/admin-ajax.php?action=private_window_modal&receive_user=1" class="service-button" data-toggle="RefreshModal" id="serviceButton">
            <i class="fa fa-comments-o nav-icon" id="serviceIcon"></i>
            <span class="service-status" id="serviceStatus">在线</span>
            <span class="nav-tooltip" id="serviceTooltip">在线客服</span>
        </button>
    </div>

    <!-- 打赏 -->
    <div class="nav-item">
        <a href="/dashang" class="service-button" target="_blank" rel="noopener noreferrer" id="rewardLink">
            <i class="fa fa-gift nav-icon" id="rewardIcon"></i>
            <span class="nav-tooltip" id="rewardTooltip">打赏我们</span>
        </a>
    </div>

    <!-- 二维码 -->
    <div class="nav-item">
        <i class="fa fa-qrcode nav-icon" id="qrcodeIcon"></i>
        <div class="qrcode-panel">
            <div class="qrcode-container">
                <img src="https://cs.yykbk.com/wp-content/uploads/2025/03/35.jpg" alt="公众号二维码" class="qrcode-img" id="qrcodeImage">
            </div>
            <div class="qrcode-title" id="qrcodeTitle">扫码关注公众号</div>
            <div class="qrcode-desc" id="qrcodeDesc">获取更多最新源码或模板</div>
        </div>
        <span class="nav-tooltip" id="qrcodeTooltip">公众号二维码</span>
    </div>

    <!-- 全屏 -->
    <div class="nav-item fullscreen-item">
        <i class="fa fa-expand nav-icon" id="fullscreen-icon"></i>
        <span class="nav-tooltip" id="fullscreen-tooltip">展开全屏</span>
    </div>

    <!-- 返回顶部 -->
    <div class="nav-item backtop-item">
        <i class="fa fa-arrow-up nav-icon"></i>
        <span class="nav-tooltip">返回顶部</span>
    </div>
</div>

<!-- 设置弹窗 -->
<div class="settings-modal" id="settingsModal">
    <div class="settings-modal-content">
        <div class="settings-modal-header">
            <h3 class="settings-modal-title"><i class="fa fa-cog"></i> 右侧导航设置</h3>
            <div class="settings-modal-actions">
                <button class="settings-btn settings-btn-cancel" id="cancelSettingsBtn"><i class="fa fa-times"></i> 取消</button>
                <button class="settings-btn settings-btn-save" id="saveSettingsBtn"><i class="fa fa-check"></i> 保存设置</button>
            </div>
            <button class="settings-modal-close" id="closeSettingsModal"><i class="fa fa-times"></i></button>
        </div>
        <div class="settings-modal-body">
            <div class="settings-card">
                <!-- 签到按钮设置 -->
                <div class="settings-section">
                    <h4 class="settings-section-title"><i class="fa fa-calendar-check-o"></i> 签到按钮</h4>
                    <div class="settings-grid">
                        <div class="settings-form-group">
                            <label class="settings-form-label">图标类名</label>
                            <input type="text" class="settings-form-input" id="inputCheckinIcon" value="fa-calendar-check-o">
                        </div>
                        <div class="settings-form-group">
                            <label class="settings-form-label">链接地址</label>
                            <input type="text" class="settings-form-input" id="inputCheckinLink" value="javascript:;">
                        </div>
                        <div class="settings-form-group">
                            <label class="settings-form-label">提示文字</label>
                            <input type="text" class="settings-form-input" id="inputCheckinTooltip" value="每日签到">
                        </div>
                    </div>
                </div>

                <!-- 在线客服设置 -->
                <div class="settings-section">
                    <h4 class="settings-section-title"><i class="fa fa-comments-o"></i> 在线客服</h4>
                    <div class="settings-grid">
                        <div class="settings-form-group">
                            <label class="settings-form-label">图标类名</label>
                            <input type="text" class="settings-form-input" id="inputServiceIcon" value="fa-comments-o">
                        </div>
                        <div class="settings-form-group">
                            <label class="settings-form-label">状态文字</label>
                            <input type="text" class="settings-form-input" id="inputServiceStatus" value="在线">
                        </div>
                        <div class="settings-form-group">
                            <label class="settings-form-label">提示文字</label>
                            <input type="text" class="settings-form-input" id="inputServiceTooltip" value="在线客服">
                        </div>
                    </div>
                </div>

                <!-- 打赏按钮设置 -->
                <div class="settings-section">
                    <h4 class="settings-section-title"><i class="fa fa-gift"></i> 打赏按钮</h4>
                    <div class="settings-grid">
                        <div class="settings-form-group">
                            <label class="settings-form-label">图标类名</label>
                            <input type="text" class="settings-form-input" id="inputRewardIcon" value="fa-gift">
                        </div>
                        <div class="settings-form-group">
                            <label class="settings-form-label">链接地址</label>
                            <input type="text" class="settings-form-input" id="inputRewardLink" value="/dashang">
                        </div>
                        <div class="settings-form-group">
                            <label class="settings-form-label">提示文字</label>
                            <input type="text" class="settings-form-input" id="inputRewardTooltip" value="打赏我们">
                        </div>
                    </div>
                </div>

                <!-- 二维码设置 -->
                <div class="settings-section">
                    <h4 class="settings-section-title"><i class="fa fa-qrcode"></i> 二维码</h4>
                    <div class="settings-grid">
                        <div class="settings-form-group">
                            <label class="settings-form-label">图标类名</label>
                            <input type="text" class="settings-form-input" id="inputQrcodeIcon" value="fa-qrcode">
                        </div>
                        <div class="settings-form-group">
                            <label class="settings-form-label">二维码图片URL</label>
                            <input type="text" class="settings-form-input" id="inputQrcodeImage" value="https://cs.yykbk.com/wp-content/uploads/2025/03/35.jpg">
                        </div>
                        <div class="settings-form-group">
                            <label class="settings-form-label">二维码标题</label>
                            <input type="text" class="settings-form-input" id="inputQrcodeTitle" value="扫码关注公众号">
                        </div>
                        <div class="settings-form-group">
                            <label class="settings-form-label">二维码描述</label>
                            <input type="text" class="settings-form-input" id="inputQrcodeDesc" value="获取更多最新源码或模板">
                        </div>
                        <div class="settings-form-group">
                            <label class="settings-form-label">提示文字</label>
                            <input type="text" class="settings-form-input" id="inputQrcodeTooltip" value="公众号二维码">
                        </div>
                    </div>
                </div>

                <!-- VIP按钮设置 -->
                <div class="settings-section">
                    <h4 class="settings-section-title"><i class="fa fa-diamond"></i> VIP按钮</h4>
                    <div class="settings-grid vip-grid">
                        <div class="settings-form-group">
                            <label class="settings-form-label">图标类名</label>
                            <input type="text" class="settings-form-input" id="inputVipIcon" value="fa-diamond">
                        </div>
                        <div class="settings-form-group">
                            <label class="settings-form-label">VIP价格</label>
                            <input type="text" class="settings-form-input" id="inputVipPrice" value="¥118">
                        </div>
                        <div class="settings-form-group">
                            <label class="settings-form-label">原价</label>
                            <input type="text" class="settings-form-input" id="inputVipOriginalPrice" value="¥298">
                        </div>
                        <div class="settings-form-group">
                            <label class="settings-form-label">开通链接</label>
                            <input type="text" class="settings-form-input" id="inputVipLink" value="/vip-2">
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

<script>
(function() {
    'use strict';

    // 缓存DOM元素
    const adminSettingsBtn = document.getElementById('adminSettingsBtn');
    const settingsModal = document.getElementById('settingsModal');
    const closeSettingsModalBtn = document.getElementById('closeSettingsModal');
    const cancelSettingsBtn = document.getElementById('cancelSettingsBtn');
    const saveSettingsBtn = document.getElementById('saveSettingsBtn');

    // 打开设置弹窗
    if (adminSettingsBtn) {
        adminSettingsBtn.addEventListener('click', function() {
            settingsModal.classList.add('active');
            document.body.style.overflow = 'hidden';
        });
    }

    // 关闭弹窗
    function closeModal() {
        settingsModal.classList.remove('active');
        document.body.style.overflow = '';
    }

    if (closeSettingsModalBtn) closeSettingsModalBtn.addEventListener('click', closeModal);
    if (cancelSettingsBtn) cancelSettingsBtn.addEventListener('click', closeModal);

    settingsModal.addEventListener('click', function(e) {
        if (e.target === settingsModal) closeModal();
    });

    document.addEventListener('keydown', function(e) {
        if (e.key === 'Escape' && settingsModal.classList.contains('active')) closeModal();
    });

    // 保存设置
    if (saveSettingsBtn) {
        saveSettingsBtn.addEventListener('click', function() {
            // 批量更新DOM
            const updates = {
                checkinIcon: { el: document.getElementById('checkinIcon'), prop: 'className', format: v => 'fa ' + v + ' nav-icon' },
                checkinLink: { el: document.getElementById('checkinLink'), prop: 'href' },
                checkinTooltip: { el: document.getElementById('checkinTooltip'), prop: 'textContent' },
                serviceIcon: { el: document.getElementById('serviceIcon'), prop: 'className', format: v => 'fa ' + v + ' nav-icon' },
                serviceStatus: { el: document.getElementById('serviceStatus'), prop: 'textContent' },
                serviceTooltip: { el: document.getElementById('serviceTooltip'), prop: 'textContent' },
                rewardIcon: { el: document.getElementById('rewardIcon'), prop: 'className', format: v => 'fa ' + v + ' nav-icon' },
                rewardLink: { el: document.getElementById('rewardLink'), prop: 'href' },
                rewardTooltip: { el: document.getElementById('rewardTooltip'), prop: 'textContent' },
                qrcodeIcon: { el: document.getElementById('qrcodeIcon'), prop: 'className', format: v => 'fa ' + v + ' nav-icon' },
                qrcodeImage: { el: document.getElementById('qrcodeImage'), prop: 'src' },
                qrcodeTitle: { el: document.getElementById('qrcodeTitle'), prop: 'textContent' },
                qrcodeDesc: { el: document.getElementById('qrcodeDesc'), prop: 'textContent' },
                qrcodeTooltip: { el: document.getElementById('qrcodeTooltip'), prop: 'textContent' }
            };

            // 执行更新
            for (const [key, config] of Object.entries(updates)) {
                const inputId = 'input' + key.charAt(0).toUpperCase() + key.slice(1);
                const input = document.getElementById(inputId);
                if (input && config.el) {
                    const value = input.value;
                    config.el[config.prop] = config.format ? config.format(value) : value;
                }
            }

            // VIP特殊处理
            const vipIconInput = document.getElementById('inputVipIcon');
            const vipIcon = document.querySelector('.vip-item-right .nav-icon');
            if (vipIconInput && vipIcon) vipIcon.className = 'fa ' + vipIconInput.value + ' nav-icon';

            const vipPriceInput = document.getElementById('inputVipPrice');
            const vipPrice = document.querySelector('.vip-price .current');
            if (vipPriceInput && vipPrice) vipPrice.textContent = vipPriceInput.value;

            const vipOriginalPriceInput = document.getElementById('inputVipOriginalPrice');
            const vipOriginalPrice = document.querySelector('.vip-price .original');
            if (vipOriginalPriceInput && vipOriginalPrice) vipOriginalPrice.textContent = vipOriginalPriceInput.value;

            const vipLinkInput = document.getElementById('inputVipLink');
            const vipCta = document.querySelector('.vip-cta');
            if (vipLinkInput && vipCta) vipCta.href = vipLinkInput.value;

            // 保存设置到localStorage
            saveSettingsToLocalStorage();

            // 显示成功提示
            const toast = document.createElement('div');
            toast.style.cssText = 'position:fixed;top:24px;left:50%;transform:translateX(-50%);background:linear-gradient(135deg,#10b981,#34d399);color:#fff;padding:16px 32px;border-radius:14px;font-size:15px;font-weight:700;box-shadow:0 8px 28px rgba(16,185,129,0.4);z-index:999999;';
            toast.innerHTML = '<i class="fa fa-check-circle" style="margin-right:8px;"></i>设置保存成功!';
            document.body.appendChild(toast);
            setTimeout(function() { toast.remove(); }, 2000);

            setTimeout(closeModal, 200);
        });
    }

    function saveSettingsToLocalStorage() {
        const settings = {
            checkinIcon: document.getElementById('inputCheckinIcon').value,
            checkinLink: document.getElementById('inputCheckinLink').value,
            checkinTooltip: document.getElementById('inputCheckinTooltip').value,
            serviceIcon: document.getElementById('inputServiceIcon').value,
            serviceStatus: document.getElementById('inputServiceStatus').value,
            serviceTooltip: document.getElementById('inputServiceTooltip').value,
            rewardIcon: document.getElementById('inputRewardIcon').value,
            rewardLink: document.getElementById('inputRewardLink').value,
            rewardTooltip: document.getElementById('inputRewardTooltip').value,
            qrcodeIcon: document.getElementById('inputQrcodeIcon').value,
            qrcodeImage: document.getElementById('inputQrcodeImage').value,
            qrcodeTitle: document.getElementById('inputQrcodeTitle').value,
            qrcodeDesc: document.getElementById('inputQrcodeDesc').value,
            qrcodeTooltip: document.getElementById('inputQrcodeTooltip').value,
            vipIcon: document.getElementById('inputVipIcon').value,
            vipPrice: document.getElementById('inputVipPrice').value,
            vipOriginalPrice: document.getElementById('inputVipOriginalPrice').value,
            vipLink: document.getElementById('inputVipLink').value
        };

        try {
            localStorage.setItem('navSettings', JSON.stringify(settings));
        } catch (e) {
            console.warn('无法保存设置:', e);
        }
    }

    function loadSettingsFromLocalStorage() {
        try {
            const savedSettings = localStorage.getItem('navSettings');
            if (!savedSettings) return;

            const settings = JSON.parse(savedSettings);

            // 批量设置输入框值
            const inputFields = [
                'inputCheckinIcon', 'inputCheckinLink', 'inputCheckinTooltip',
                'inputServiceIcon', 'inputServiceStatus', 'inputServiceTooltip',
                'inputRewardIcon', 'inputRewardLink', 'inputRewardTooltip',
                'inputQrcodeIcon', 'inputQrcodeImage', 'inputQrcodeTitle',
                'inputQrcodeDesc', 'inputQrcodeTooltip',
                'inputVipIcon', 'inputVipPrice', 'inputVipOriginalPrice', 'inputVipLink'
            ];

            inputFields.forEach(id => {
                const el = document.getElementById(id);
                if (el) {
                    const key = id.replace('input', '').replace(/^./, str => str.toLowerCase());
                    el.value = settings[key] || '';
                }
            });

            // 批量更新显示元素
            const displayUpdates = [
                { key: 'checkinIcon', el: document.getElementById('checkinIcon'), prop: 'className', format: v => 'fa ' + v + ' nav-icon' },
                { key: 'checkinLink', el: document.getElementById('checkinLink'), prop: 'href' },
                { key: 'checkinTooltip', el: document.getElementById('checkinTooltip'), prop: 'textContent' },
                { key: 'serviceIcon', el: document.getElementById('serviceIcon'), prop: 'className', format: v => 'fa ' + v + ' nav-icon' },
                { key: 'serviceStatus', el: document.getElementById('serviceStatus'), prop: 'textContent' },
                { key: 'serviceTooltip', el: document.getElementById('serviceTooltip'), prop: 'textContent' },
                { key: 'rewardIcon', el: document.getElementById('rewardIcon'), prop: 'className', format: v => 'fa ' + v + ' nav-icon' },
                { key: 'rewardLink', el: document.getElementById('rewardLink'), prop: 'href' },
                { key: 'rewardTooltip', el: document.getElementById('rewardTooltip'), prop: 'textContent' },
                { key: 'qrcodeIcon', el: document.getElementById('qrcodeIcon'), prop: 'className', format: v => 'fa ' + v + ' nav-icon' },
                { key: 'qrcodeImage', el: document.getElementById('qrcodeImage'), prop: 'src' },
                { key: 'qrcodeTitle', el: document.getElementById('qrcodeTitle'), prop: 'textContent' },
                { key: 'qrcodeDesc', el: document.getElementById('qrcodeDesc'), prop: 'textContent' },
                { key: 'qrcodeTooltip', el: document.getElementById('qrcodeTooltip'), prop: 'textContent' }
            ];

            displayUpdates.forEach(config => {
                if (config.el && settings[config.key]) {
                    config.el[config.prop] = config.format ? config.format(settings[config.key]) : settings[config.key];
                }
            });

            // VIP特殊处理
            if (settings.vipIcon) {
                const vipIcon = document.querySelector('.vip-item-right .nav-icon');
                if (vipIcon) vipIcon.className = 'fa ' + settings.vipIcon + ' nav-icon';
            }
            if (settings.vipPrice) {
                const vipPrice = document.querySelector('.vip-price .current');
                if (vipPrice) vipPrice.textContent = settings.vipPrice;
            }
            if (settings.vipOriginalPrice) {
                const vipOriginalPrice = document.querySelector('.vip-price .original');
                if (vipOriginalPrice) vipOriginalPrice.textContent = settings.vipOriginalPrice;
            }
            if (settings.vipLink) {
                const vipCta = document.querySelector('.vip-cta');
                if (vipCta) vipCta.href = settings.vipLink;
            }
        } catch (e) {
            console.warn('加载设置失败:', e);
        }
    }

    // 加载设置
    loadSettingsFromLocalStorage();

    // 返回顶部 - 使用防抖优化
    const backtopBtn = document.querySelector('.backtop-item');
    let scrollRAF = null;

    function checkScroll() {
        if (window.scrollY > 300) {
            backtopBtn.classList.add('visible');
        } else {
            backtopBtn.classList.remove('visible');
        }
    }

    window.addEventListener('scroll', function() {
        if (scrollRAF) cancelAnimationFrame(scrollRAF);
        scrollRAF = requestAnimationFrame(checkScroll);
    }, { passive: true });

    checkScroll();
    backtopBtn.addEventListener('click', function() { 
        window.scrollTo({ top: 0, behavior: 'smooth' }); 
    });

    // VIP跳转
    const vipItem = document.querySelector('.vip-item-right');
    if (vipItem) {
        vipItem.addEventListener('click', function() { 
            window.location.href = '/svip'; 
        });
    }

    // 全屏
    const fullscreenBtn = document.querySelector('.fullscreen-item');
    const fullscreenIcon = document.getElementById('fullscreen-icon');
    const fullscreenTooltip = document.getElementById('fullscreen-tooltip');

    function requestFullscreen(element) {
        if (element.requestFullscreen) return element.requestFullscreen();
        if (element.webkitRequestFullscreen) return element.webkitRequestFullscreen();
        if (element.msRequestFullscreen) return element.msRequestFullscreen();
    }

    function exitFullscreen() {
        if (document.exitFullscreen) return document.exitFullscreen();
        if (document.webkitExitFullscreen) return document.webkitExitFullscreen();
        if (document.msExitFullscreen) return document.msExitFullscreen();
    }

    function getFullscreenElement() {
        return document.fullscreenElement || document.webkitFullscreenElement || document.msFullscreenElement;
    }

    function updateFullscreenState() {
        if (getFullscreenElement()) {
            fullscreenIcon.className = 'fa fa-compress nav-icon';
            fullscreenTooltip.textContent = '退出全屏';
        } else {
            fullscreenIcon.className = 'fa fa-expand nav-icon';
            fullscreenTooltip.textContent = '展开全屏';
        }
    }

    updateFullscreenState();
    fullscreenBtn.addEventListener('click', function() {
        if (!getFullscreenElement()) requestFullscreen(document.documentElement);
        else exitFullscreen();
    });

    document.addEventListener('fullscreenchange', updateFullscreenState);
    document.addEventListener('webkitfullscreenchange', updateFullscreenState);
    document.addEventListener('MSFullscreenChange', updateFullscreenState);
})();
</script>
<!-- 右侧悬浮导航结束 -->
[/hidecontent]
弹幕表态
我的头像
0/300
文明发言,一起守护温柔的评论区

0 条回复

A文章作者 M管理员
这里需要一条查重率 0% 的评论

还没有评论,来说两句吧~

1会员总数
104文章总数
1074浏览总数
0今日发布
277天稳定运行
  • 波浪
  • 波浪
  • 波浪
  • 波浪

Hello World

页面耗时 0.079 秒 | 数据库查询 63 次 | 内存 1.34 MB | 在线人数:1人

104+

精品文章等您来关注

Copyright © 2025 - 2026 Hello World