@data-slot/toggle

中文文档
1.1.3发布于 2026/11/05MITTypeScriptESM + CJS构建来源已验证近 30 天下载 4291

用于香草JavaScript的无头切换按钮组件. 无障碍而无作相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相.

中文使用文档
文档目录14 节
  1. 安装
  2. 快速启动
  3. API 密码
  4. 初始化
  5. 槽数
  6. 数据属性
  7. 选项
  8. 主计长
  9. 活动
  10. 样式
  11. 键盘导航
  12. 无障碍
  13. 行为
  14. 许可证

@ data- slot/ 切换

用于香草JavaScript的无头切换按钮组件. 无障碍而无作相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相.

安装

npm install @data-slot/toggle

快速启动

<button data-slot="toggle">Bold</button>
<button data-slot="toggle" data-default-pressed>Italic</button>

<script type="module">
  import { create } from "@data-slot/toggle";

  const controllers = create();
</script>

API 密码

初始化

create(scope?)

自动发现并约束范围中的所有切换例(默认为 document) (中文(简体) ).

import { create } from "@data-slot/toggle";

const controllers = create(); // Returns ToggleController[]

createToggle(root, options?)

为特定元素创建控制器.

import { createToggle } from "@data-slot/toggle";

const toggle = createToggle(element, {
  defaultPressed: false,
  disabled: false,
  onPressedChange: (pressed) => console.log(pressed),
});

槽数

运行时间槽

  • toggle - 按钮本身。 切换其受压状态并曝光 aria-pressed 财务报告和审定财务报表 data-state - 不需要儿童插槽.

标记

<button data-slot="toggle">Label</button>

切换是一个简单的单元素组件. 总是使用本地 <button> 元素键盘支持( Enter/ Space) 和焦点处理只保证 <button>非按钮元素(例如, <div>, (中文(简体) ), <span>不建议这样做,需要手工操作键盘.

数据属性

也可以通过根元素上的数据属性来设定选项. 联合来文的选择优先.

属性类型默认说明
data-default-pressed布尔false初始按下状态
data-disabled布尔false状态
<!-- Initially pressed toggle -->
<button data-slot="toggle" data-default-pressed>Bold</button>

选项

选项类型默认说明
defaultPressedbooleanfalse初始按下状态
disabledbooleanfalse状态
onPressedChange(pressed: boolean) => voidundefined状态改变时召回

主计长

方法/财产说明
toggle()切换按下状态( 已禁用 )
press()设定为真( 已禁用 )
release()套接字为假( 已禁用 )
pressed当前按下状态( 只读) boolean(中文(简体) )
destroy()清理所有事件听众

说明: 控制器的方法总是有效的,即使残疾。 这样不管用户交互状态如何,都可以进行程序控制. 如果您在调用控制器方法前需要检查已禁用状态, 请亲自检查元素的属性 .

活动

境外事件

通过自定义事件聆听更改 :

element.addEventListener("toggle:change", (e) => {
  console.log("Pressed:", e.detail.pressed);
});

入境事件

通过事件控制切换( 禁用时被忽略 ) :

活动细节说明
toggle:set{ value: boolean }按程序设置状态
// Set to specific state
element.dispatchEvent(
  new CustomEvent("toggle:set", { detail: { value: true } })
);

折旧形状

下列形状被去化并会在v1.0中去除:

// Deprecated: boolean detail
element.dispatchEvent(
  new CustomEvent("toggle:set", { detail: true })
);

// Deprecated: { pressed } shape
element.dispatchEvent(
  new CustomEvent("toggle:set", { detail: { pressed: true } })
);

使用 { value: boolean } 换句话说.

样式

状态属性

组件设置这些属性用于样式:

  • aria-pressed="true|false" - 阿里亚州
  • data-state="on|off" - CSS型钩子

基本结构

/* Unpressed state */
[data-slot="toggle"] {
  background: #e5e7eb;
  border: none;
  padding: 0.5rem 1rem;
  cursor: pointer;
}

/* Pressed state */
[data-slot="toggle"][data-state="on"] {
  background: #3b82f6;
  color: white;
}

/* Or use aria-pressed */
[data-slot="toggle"][aria-pressed="true"] {
  background: #3b82f6;
  color: white;
}

/* Disabled state */
[data-slot="toggle"][aria-disabled="true"] {
  opacity: 0.5;
  cursor: not-allowed;
}

尾风示例

<button
  data-slot="toggle"
  class="px-4 py-2 bg-gray-200 data-[state=on]:bg-blue-500 data-[state=on]:text-white aria-disabled:opacity-50"
>
  Bold
</button>

键盘导航

切换使用本地 <button> 元素,所以键盘支持是自动的 :

密钥行动
Enter切换状态
Space切换状态

无障碍

该组件自动处理 :

  • aria-pressed 状态在按钮上
  • 土著 disabled 财务报告和审定财务报表 aria-disabled 禁用时( 对于按钮)
  • type="button" 防止提交表格

行为

残疾行为

残疾时(通过 disabled 选项, data-disabled 属性, 本地 disabled 属性,或 aria-disabled="true":

投入封锁?
单击/ 输入/ 空格对
toggle:set 事件对
主计长方法toggle(), (中文(简体) ), press(), (中文(简体) ), release()(中文(简体) )没有

对于 <button> 要素 disabled 选项同时设置本地 disabled 属性和 aria-disabled="true"。仅针对其他要素 aria-disabled 已经设定.

许可证

麻省理工学院

版本与发布记录

@data-slot/toggle 共发布 149 个版本,首次发布于 2026/02/02;过去 12 个月发布了 149 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
1.1.3latest2026/11/056 天前
1.1.22026/10/1428 天前
1.1.12026/10/051 个月前
1.1.02026/10/021 个月前
1.0.22026/09/271 个月前
1.0.12026/09/261 个月前

关于 @data-slot/toggle 的常见问题

@data-slot/toggle 是什么?

用于香草JavaScript的无头切换按钮组件. 无障碍而无作相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相.

如何安装 @data-slot/toggle?

在项目目录运行 npm install @data-slot/toggle,或使用 pnpm add / yarn add / bun add。

@data-slot/toggle 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@data-slot/toggle 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@data-slot/toggle 可以商用吗?

@data-slot/toggle 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@data-slot/toggle 的下载量有多少?

根据 npm 官方下载统计,@data-slot/toggle 在 2026/10/12 – 2026/11/10 这 30 天内被下载 4,291 次,日均约 143 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@data-slot/toggle 还在维护吗?

最新版本 1.1.3 发布于 2026/11/05(6 天前);至今共发布 149 个版本,其中过去 12 个月发布了 149 个;首次发布于 2026/02/02。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。