35
不知名管理员
当前还没有回复,欢迎成为第一个参与讨论的人。
在首页顶部显示轮播图,支持触摸滑动、滑动动画、定时上下架、移动端独立高度、图片显示方式配置。
| 属性 | 值 |
|---|---|
| 插件 ID | home-carousel |
| 版本 | 1.2.0 |
| 作者 | 狡猾的骗骗花 nodey@qq.com |
| 入口 | dist/server.mjs |
| 注入槽位 | feed.main.before |


opacity + transform: translateX() 实现方向性滑动,支持 prefers-reduced-motion 无障碍降级touch-action: pan-y 保证不干扰页面纵向滚动tabindex="0")可用左右方向键切换eager 加载,其余 lazy 延迟加载| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| 开启轮播图 | 开关 | true |
总开关 |
| 图片高度 | 选择 | 280 |
桌面端高度,预设 200/280/360/480px,显示推荐宽度×高度 |
| 移动端高度 | 选择 | 200 |
移动端独立高度(≤768px 生效),预设同上 |
| 图片显示方式 | 选择 | cover |
cover 裁剪居中 / contain 完整显示 / fill 拉伸填充 |
| 自动播放 | 开关 | true |
是否自动轮播 |
| 停留时间 | 数字 | 4000 |
每张图片展示时长(毫秒),最少 1000 |
| 字段 | 说明 |
|---|---|
| 显示图片 | 图片 URL,建议 16:9 比例 |
| 标题 | 叠加在图片底部的文字,可留空 |
| 跳转地址 | 点击跳转链接,支持站内 /posts/1 和外链 https://...,可留空 |
| 定时上架 | 到该时间后显示,留空则立即显示 |
| 定时下架 | 到该时间后隐藏,留空则不自动下架 |
采用 MVC 分层架构,职责清晰分离:
textaddon.json ← 插件清单 dist/ config.mjs ← Model 层:配置归一化与安全过滤 server.mjs ← 入口:slot 渲染 + 后台页面/API assets/ home-carousel-client.js ← 前台交互(触摸/键盘/动画/自动播放) home-carousel-admin.js ← 后台入口(controller → view) home-carousel-admin.controller.js ← 状态管理(加载/保存/增删改排序) home-carousel-admin.view.js ← 视图渲染(配置表单 + 轮播项列表) home-carousel-admin.css ← 后台样式(.hc- 命名空间)
text管理员配置 → POST /admin-api → normalizeCarouselConfig → writeConfig ↓ 访客访问首页 → readConfig → normalizeCarouselConfig → isSlideActive 过滤 ↓ buildCarouselHtml → SSR HTML + CSS 变量 ↓ clientModule 绑定交互事件
escapeHtml 转义后输出http:// https:// / # mailto: tel: 前缀,阻止 javascript: data: vbscript: 等危险协议target="_blank" rel="noreferrer noopener"配置值通过内联 CSS 自定义属性传递,纯 CSS 生效,无需 JavaScript 介入:
html<div class="h-carousel-track"
style="--hc-height:280px;--hc-mobile-height:200px;--hc-object-fit:cover">
css.h-carousel-track { height: var(--hc-height, 280px); }
@media (max-width: 768px) {
.h-carousel-track { height: var(--hc-mobile-height, var(--hc-height)); }
}
.h-carousel-img { object-fit: var(--hc-object-fit, cover); }
通过 is-active 类控制 opacity 和 pointer-events,配合 transform 实现方向性滑动:
transition,设置入场幻灯片初始位置 translateX(±100%)void el.offsetWidth)提交初始状态transition,添加 is-active 类,设置 transform: translateX(0)@media (prefers-reduced-motion: reduce) 自动禁用所有过渡动画。
过滤只发生在前台渲染(renderCarouselResult),不影响后台 API——管理员仍能看到和编辑已过期的轮播项。所有幻灯片过期时整个轮播图不渲染。
textconfig:read — 读取轮播图配置 config:write — 保存轮播图配置 slot:register — 注册首页槽位 page:admin — 注册后台管理页 api:admin — 注册后台 API
home-carousel.zip