返回资源中心

class-change.js

框架库
前端工具
2 次浏览
0 个赞
CSSJavaScriptDOM操作前端

资源描述

class-change.js 是一个轻量级(<1KB)前端 JavaScript 微库,专为声明式 CSS 类名动态管理设计。它通过 HTML data 属性(如 data-class-change)绑定 DOM 元素的类名变更逻辑,无需手动调用 classList API,显著降低事件监听与样式切换耦合度。适用于渐进式增强、无框架 SPA 组件、可访问性驱动交互(如焦点/悬停状态同步)、CMS 内容嵌入场景,兼顾性能与语义化开发体验。

详细内容

## class-change.js 框架简介与定位 class-change.js 是一个极简、零依赖的前端微库,专注于以声明式方式驱动 DOM 元素的 CSS 类名变更。它不替代现代框架的响应式系统,而是作为轻量级增强层,将类名操作从命令式 JavaScript(如 `el.classList.add()`)解耦为基于 HTML 数据属性的声明式配置,提升可维护性与可测试性。适用于需最小体积、无构建流程、或需在遗留系统中快速注入交互能力的场景。 ## 核心特性 - **声明式绑定**:通过 `data-class-change` 属性定义触发条件(如 `hover`, `focus`, `click`, `scroll`),无需编写事件监听器代码。 - **多态类名控制**:支持 `add`, `remove`, `toggle`, `replace` 四种基础操作,并可通过 `data-class-add`, `data-class-remove` 等属性精确指定目标类名。 - **上下文感知**:自动识别事件源(target)与目标元素(由 `data-target` 指定),支持跨元素联动(如点击按钮切换另一元素类名)。 - **生命周期钩子**:提供 `data-on-change` 属性执行自定义回调函数,便于集成分析、动画触发或状态同步。 - **无障碍友好**:原生支持 `:focus-visible`、`aria-expanded` 同步等语义化交互模式,符合 WCAG 推荐实践。 ## 适用场景 - 静态网站或 JAMstack 项目中实现交互式 UI(折叠面板、主题切换、表单状态反馈); - CMS(如 WordPress、Contentful)输出的富文本内容内嵌交互,避免污染后端模板逻辑; - 作为现有 jQuery 或 Vanilla JS 项目的渐进式重构工具,逐步替换手写 classList 操作; - 教学示例与原型开发,直观演示 DOM 状态与 CSS 类的映射关系; - 对打包体积敏感的嵌入式 Web 组件(如第三方小工具、广告 banner)。 ## 快速入门 ### 安装 直接通过 `<script>` 标签引入(推荐 CDN): ```html <script src="https://cdn.jsdelivr.net/npm/class-change@1.2.0/dist/class-change.min.js"></script> ``` 或使用 npm(适用于有构建流程的项目): ```bash npm install class-change ``` 然后在模块中导入: ```js import 'class-change'; // 自动初始化 // 或显式调用: // import { init } from 'class-change'; // init(); ``` ### 最小示例 ```html <!-- 点击按钮切换侧边栏可见性 --> <button data-class-change="click" data-class-toggle="hidden" data-target="#sidebar"> 切换菜单 </button> <div id="sidebar" class="hidden">...</div> ``` > ✅ 初始化后,无需额外 JS —— 库会自动扫描并激活所有 `data-class-*` 属性。 ## 生态与社区 - 项目托管于 GitHub([jhildenbiddle/class-change](https://github.com/jhildenbiddle/class-change)),采用 MIT 协议,文档与示例均开源; - 无官方 CLI 或插件生态,但因其零依赖设计,可无缝集成 Webpack/Vite 的 tree-shaking,或与 Alpine.js、HTMX 等轻量框架共存; - 社区活跃度适中,主要通过 GitHub Issues 提供问题反馈与用例分享,作者持续维护核心功能稳定性; - 不提供 TypeScript 类型定义(`.d.ts`)文件,但属性命名遵循标准 HTML data-* 规范,可安全用于 TS 项目。