@ 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>
选项
| 选项 | 类型 | 默认 | 说明 |
|---|---|---|---|
defaultPressed | boolean | false | 初始按下状态 |
disabled | boolean | false | 状态 |
onPressedChange | (pressed: boolean) => void | undefined | 状态改变时召回 |
主计长
| 方法/财产 | 说明 |
|---|---|
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 已经设定.
许可证
麻省理工学院