当前位置:首页 > VUE

vue实现开关

2026-01-13 00:05:23VUE

Vue 实现开关组件的方法

使用原生 HTML 和 Vue 数据绑定

通过 v-model 绑定复选框的选中状态,利用 CSS 样式模拟开关效果。

<template>
  <label class="switch">
    <input type="checkbox" v-model="isChecked">
    <span class="slider"></span>
  </label>
</template>

<script>
export default {
  data() {
    return {
      isChecked: false
    }
  }
}
</script>

<style>
.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);
}
</style>

使用第三方 UI 库

Element UI 提供了现成的开关组件:

<template>
  <el-switch v-model="value" active-color="#13ce66" inactive-color="#ff4949">
  </el-switch>
</template>

<script>
export default {
  data() {
    return {
      value: true
    }
  }
}
</script>

Ant Design Vue 的开关组件:

<template>
  <a-switch v-model:checked="checked" />
</template>

<script>
export default {
  data() {
    return {
      checked: false
    }
  }
}
</script>

自定义可复用的开关组件

创建可复用的开关组件,支持自定义样式和事件:

<!-- Switch.vue -->
<template>
  <label class="custom-switch">
    <input 
      type="checkbox" 
      :checked="modelValue" 
      @change="$emit('update:modelValue', $event.target.checked)"
    >
    <span class="custom-slider" :class="{ 'active': modelValue }"></span>
    <span class="label">{{ label }}</span>
  </label>
</template>

<script>
export default {
  props: {
    modelValue: Boolean,
    label: String
  },
  emits: ['update:modelValue']
}
</script>

<style>
/* 自定义样式 */
</style>

使用自定义组件:

<template>
  <Switch v-model="isActive" label="启用功能" />
</template>

<script>
import Switch from './Switch.vue'

export default {
  components: { Switch },
  data() {
    return {
      isActive: false
    }
  }
}
</script>

动画效果增强

为开关添加更流畅的动画效果:

.slider {
  /* 原有样式 */
  box-shadow: 0 0 1px rgba(0,0,0,0.3);
}

.slider:before {
  /* 原有样式 */
  box-shadow: 0 2px 5px rgba(0,0,0,0.2);
}

input:checked + .slider {
  /* 原有样式 */
  box-shadow: 0 0 1px #2196F3;
}

无障碍支持

增加 ARIA 属性提升可访问性:

vue实现开关

<label class="switch">
  <input 
    type="checkbox" 
    v-model="isChecked"
    role="switch"
    :aria-checked="isChecked"
    :aria-label="isChecked ? '开启' : '关闭'"
  >
  <span class="slider"></span>
</label>

标签: vue
分享给朋友:

相关文章

vue怎么实现

vue怎么实现

Vue 实现方法 Vue 是一个流行的前端框架,用于构建用户界面。以下是几种常见的实现方法: 数据绑定 使用 v-model 指令实现双向数据绑定,适用于表单输入元素。 <input v-m…

vue 实现评分

vue 实现评分

Vue 实现评分功能 在 Vue 中实现评分功能可以通过多种方式完成,包括使用第三方组件库或自定义实现。以下是两种常见的方法: 使用第三方组件库(如 Element UI) Element UI 提…

vue实现通讯

vue实现通讯

Vue 组件通讯方法 父子组件通讯 父组件向子组件传递数据通过 props,子组件向父组件传递数据通过 $emit 事件。 父组件模板: <child-component :message=…

vue实现github

vue实现github

Vue 实现 GitHub 相关功能 创建 GitHub API 请求 在 Vue 项目中,可以使用 axios 或 fetch 与 GitHub API 进行交互。需要在 GitHub 上创建个人访…

vue实现座位

vue实现座位

Vue实现座位布局 使用Vue实现座位布局可以通过组件化和响应式数据管理来简化开发流程。以下是一个完整的实现方案: 数据准备 定义座位数据结构,通常使用二维数组表示行列关系: data() {…

vue路由实现介绍

vue路由实现介绍

Vue 路由实现介绍 Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。它通过动态映射组件到路由实现页面无刷新切换,同时支持嵌套路由、路由参数、导航守卫等高级功能…