当前位置:首页 > 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:

js实现开关

安装:

npm install switchery

使用:

js实现开关

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);

无障碍访问优化

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

<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
分享给朋友:

相关文章

jquery js

jquery js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够更高…

js实现图

js实现图

JavaScript 实现图的常用方法 在 JavaScript 中,图(Graph)可以通过多种方式实现,常见的包括邻接表(Adjacency List)和邻接矩阵(Adjacency Matrix…

js实现代码雨

js实现代码雨

实现代码雨效果 使用HTML5 Canvas和JavaScript可以轻松实现经典的代码雨效果。以下是完整的实现代码和说明: HTML结构 <!DOCTYPE html> <htm…

实现继承js

实现继承js

实现继承的方式 在JavaScript中,实现继承可以通过多种方式完成,每种方式都有其优缺点。以下是几种常见的实现继承的方法: 原型链继承 原型链继承是最基本的继承方式,通过将子类的原型指向父类的实…

js 实现拖拽

js 实现拖拽

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

js实现放大缩小

js实现放大缩小

使用 CSS transform 实现缩放 通过修改元素的 transform 属性实现平滑缩放效果。CSS 的 scale() 函数可以轻松调整元素大小。 const element = docu…