当前位置:首页 > JavaScript

js 实现开关

2026-04-05 19:07:43JavaScript

使用HTML和CSS创建开关样式

创建一个基本的开关样式需要HTML和CSS的配合。HTML提供结构,CSS负责视觉效果。

<label class="switch">
  <input type="checkbox">
  <span class="slider round"></span>
</label>
.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;
}

.slider:before {
  position: absolute;
  content: "";
  height: 26px;
  width: 26px;
  left: 4px;
  bottom: 4px;
  background-color: white;
  transition: .4s;
}

input:checked + .slider {
  background-color: #2196F3;
}

input:checked + .slider:before {
  transform: translateX(26px);
}

.slider.round {
  border-radius: 34px;
}

.slider.round:before {
  border-radius: 50%;
}

添加JavaScript交互功能

通过JavaScript监听开关状态变化并执行相应操作。

const toggleSwitch = document.querySelector('.switch input[type="checkbox"]');

function switchTheme(e) {
  if (e.target.checked) {
    console.log('开关开启');
    // 开启状态下的操作
  } else {
    console.log('开关关闭');
    // 关闭状态下的操作
  }
}

toggleSwitch.addEventListener('change', switchTheme, false);

使用第三方库实现高级开关

对于更复杂的需求,可以考虑使用第三方库如switchery。

js 实现开关

安装switchery:

npm install switchery

使用示例:

js 实现开关

import Switchery from 'switchery';

const elem = document.querySelector('.js-switch');
const init = new Switchery(elem, {
  color: '#41b7f1',
  secondaryColor: '#dedede',
  size: 'small'
});

响应式开关实现

确保开关在不同设备上都能良好显示,可以添加响应式设计。

@media screen and (max-width: 600px) {
  .switch {
    width: 50px;
    height: 28px;
  }

  .slider:before {
    height: 20px;
    width: 20px;
  }

  input:checked + .slider:before {
    transform: translateX(22px);
  }
}

无障碍访问优化

为开关添加适当的ARIA属性,提升无障碍访问体验。

<label class="switch">
  <input type="checkbox" role="switch" aria-checked="false">
  <span class="slider round"></span>
</label>
const switchInput = document.querySelector('.switch input');
switchInput.addEventListener('change', function() {
  this.setAttribute('aria-checked', this.checked);
});

标签: js
分享给朋友:

相关文章

js 实现vue模板

js 实现vue模板

实现 Vue 模板的 JavaScript 方法 通过原生 JavaScript 可以实现类似 Vue 的模板渲染功能,主要包括数据绑定、指令处理和模板解析。以下是核心实现思路: 数据绑定与响应式…

js实现图片上传

js实现图片上传

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现图片上传功能。HTML部分需要创建一个文件选择输入框和一个用于…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

js 实现拖拽

js 实现拖拽

实现拖拽的基本步骤 在JavaScript中实现拖拽功能需要监听几个关键事件:mousedown、mousemove和mouseup。以下是实现的基本逻辑。 监听目标元素的mousedown事件,记…

js实现左右滑动

js实现左右滑动

实现左右滑动的 JavaScript 方法 监听触摸事件 通过 touchstart、touchmove 和 touchend 事件来检测用户的手势操作。记录触摸的起始位置和移动距离,判断滑动方向。…

js实现隐藏div

js实现隐藏div

隐藏div的几种方法 使用JavaScript隐藏div元素可以通过多种方式实现,以下是几种常见的方法: 方法一:修改style.display属性 将div的display属性设置为"none"…