结合CSS样式可以快速实现Switch开关效果。
当前位置:首页 > VUE

vue实现switch开关

2026-03-09 12:18:36VUE

Vue实现Switch开关的方法

使用原生HTML和CSS实现

通过HTML的<input type="checkbox">结合CSS样式可以快速实现Switch开关效果。

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

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

使用第三方UI库

主流UI库如Element UI、Vuetify等都已封装好Switch组件,可直接使用。

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>

Vuetify示例:

<template>
  <v-switch v-model="switchValue" :label="`Switch: ${switchValue.toString()}`"></v-switch>
</template>

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

自定义可复用组件

创建独立的Switch组件,提高代码复用性。

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

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

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

使用方式:

<template>
  <Switch v-model="isActive" />
</template>

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

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

添加动画效果

通过CSS过渡或动画增强交互体验。

.slider {
  transition: all 0.3s cubic-bezier(0.68, -0.55, 0.265, 1.55);
}

.slider:before {
  transition: all 0.3s ease-in-out;
}

input:checked + .slider {
  box-shadow: 0 0 10px rgba(33, 150, 243, 0.5);
}

添加禁用状态

扩展组件功能,支持禁用状态。

vue实现switch开关

<template>
  <label class="switch" :class="{ 'disabled': disabled }">
    <input type="checkbox" v-model="modelValue" :disabled="disabled">
    <span class="slider"></span>
  </label>
</template>

<script>
export default {
  props: {
    modelValue: Boolean,
    disabled: Boolean
  }
}
</script>

<style>
.disabled {
  opacity: 0.6;
  cursor: not-allowed;
}
</style>

标签: vueswitch
分享给朋友:

相关文章

vue实现验证码

vue实现验证码

Vue 实现验证码的方法 使用第三方库 安装 vue-captcha 或 vue-recaptcha 等第三方库,这些库提供了现成的验证码组件,可以直接集成到 Vue 项目中。以 vue-recapt…

vue实现app

vue实现app

Vue 实现 App 的常见方法 使用 Vue 开发移动端 App 主要有两种主流方案:混合开发(Hybrid)和原生渲染。以下是具体实现方式和工具链: 混合开发方案(WebView 嵌入) 通过…

vue实现tap

vue实现tap

Vue 实现 Tap 事件 在移动端开发中,Tap 事件比 Click 事件更常用,因为 Click 事件有 300ms 延迟。以下是几种在 Vue 中实现 Tap 事件的方法。 使用第三方库 安装…

vue实现树形

vue实现树形

Vue 实现树形组件 在 Vue 中实现树形结构通常需要递归组件和动态数据绑定。以下是实现树形组件的几种常见方法。 递归组件实现 递归组件是 Vue 中实现树形结构的核心方法。通过组件调用自身,可以…

vue实现mvvm

vue实现mvvm

Vue 实现 MVVM 模式 MVVM(Model-View-ViewModel)是一种前端架构模式,Vue 是其典型实现之一。MVVM 的核心是通过数据绑定和响应式系统实现视图与数据的自动同步。…

vue实现 页面

vue实现 页面

Vue 实现页面的核心方法 创建 Vue 项目 使用 Vue CLI 或 Vite 快速初始化项目。Vue CLI 是官方脚手架工具,适合传统项目;Vite 提供更快的现代构建体验。 npm cre…