js实现开关按钮
实现开关按钮的HTML结构
使用<label>和<input type="checkbox">组合实现基础结构。通过<label>关联复选框,扩大可点击区域:
<label class="switch">
<input type="checkbox">
<span class="slider"></span>
</label>
CSS样式设计
通过CSS伪元素和过渡效果实现滑动动画效果。关键点包括隐藏原生复选框、设计滑块轨道和圆形滑块:

.switch {
position: relative;
display: inline-block;
width: 60px;
height: 34px;
}
.switch input {
opacity: 0;
width: 0;
height: 0;
}
.slider {
position: absolute;
cursor: pointer;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: #ccc;
transition: .4s;
border-radius: 34px;
}
.slider:before {
position: absolute;
content: "";
height: 26px;
width: 26px;
left: 4px;
bottom: 4px;
background-color: white;
transition: .4s;
border-radius: 50%;
}
input:checked + .slider {
background-color: #2196F3;
}
input:checked + .slider:before {
transform: translateX(26px);
}
JavaScript交互控制
添加事件监听器处理状态变化,可结合本地存储实现状态持久化:
const toggleSwitch = document.querySelector('.switch input');
const toggleHandler = (e) => {
console.log(e.target.checked ? '开启' : '关闭');
// 可添加状态存储或AJAX请求
};
toggleSwitch.addEventListener('change', toggleHandler);
动画效果增强
为滑块添加弹性动画效果,通过CSS自定义属性控制动画曲线:

.slider:before {
transition: transform 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275);
}
无障碍优化
添加ARIA属性提升屏幕阅读器兼容性:
<label class="switch">
<input type="checkbox" role="switch" aria-checked="false">
<span class="slider"></span>
</label>
toggleSwitch.setAttribute('aria-checked', toggleSwitch.checked);
主题色定制
通过CSS变量实现动态主题色切换:
:root {
--switch-active: #2196F3;
}
input:checked + .slider {
background-color: var(--switch-active);
}