当前位置:首页 > JavaScript

js实现开关

2026-04-07 04:33:03JavaScript

使用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:focus + .slider {
  box-shadow: 0 0 1px #2196F3;
}

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

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

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

添加JavaScript交互功能

为开关添加交互功能,可以在状态改变时触发相应操作:

document.querySelector('.switch input').addEventListener('change', function() {
  if(this.checked) {
    console.log('开关已打开');
    // 执行打开状态的操作
  } else {
    console.log('开关已关闭');
    // 执行关闭状态的操作
  }
});

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

如果需要更复杂的功能,可以考虑使用第三方库如switchery:

安装:

npm install switchery

使用:

import Switchery from 'switchery';

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

响应式开关组件

创建一个响应式的开关组件,可以根据屏幕大小调整样式:

class ToggleSwitch {
  constructor(element) {
    this.element = element;
    this.init();
  }

  init() {
    this.element.addEventListener('click', this.toggle.bind(this));
    window.addEventListener('resize', this.adjustSize.bind(this));
  }

  toggle() {
    this.element.classList.toggle('active');
    const event = new CustomEvent('toggle', {
      detail: { isActive: this.element.classList.contains('active') }
    });
    this.element.dispatchEvent(event);
  }

  adjustSize() {
    const width = window.innerWidth;
    if(width < 768) {
      this.element.style.transform = 'scale(0.8)';
    } else {
      this.element.style.transform = 'scale(1)';
    }
  }
}

// 使用
const switchElement = document.querySelector('.custom-switch');
new ToggleSwitch(switchElement);

无障碍访问优化

确保开关对屏幕阅读器友好:

js实现开关

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

标签: js
分享给朋友:

相关文章

js实现vr

js实现vr

使用WebXR API实现VR体验 WebXR是浏览器中实现VR和AR体验的标准API,它取代了早期的WebVR。现代浏览器如Chrome、Edge和Firefox已支持WebXR。 // 初始化W…

js实现投球

js实现投球

实现投球动画的基本思路 使用JavaScript和CSS动画结合的方式模拟投球效果。核心是通过改变元素的位置、旋转和缩放属性,配合定时器或CSS过渡实现平滑动画。 创建基础HTML结构 <…

js验证码的实现

js验证码的实现

验证码的基本实现原理 验证码(CAPTCHA)的核心目标是区分人类用户和自动化程序。JavaScript可用于生成或验证客户端验证码,但需注意纯前端验证可能被绕过,通常需结合后端验证。 纯前端验证码…

js实现菜单

js实现菜单

实现基本HTML结构 使用HTML创建菜单的基本框架,通常包含<ul>和<li>元素。示例结构如下: <ul id="menu"> <li><…

js实现刷新页面

js实现刷新页面

刷新页面的方法 在JavaScript中,可以通过多种方式实现页面刷新。以下是几种常见的方法: 使用 location.reload() 调用 location.reload() 方法可以重新加载当…

js实现div隐藏

js实现div隐藏

使用CSS的display属性隐藏div 通过设置元素的display属性为none,可以完全隐藏div元素。这种方法不仅隐藏元素,还会从文档流中移除,不占据页面空间。 document.getEl…