Vue2开关(Switch)

简介: 这是一个基于 Vue3 的开关(Switch)组件,支持多种自定义属性:初始选中状态 (`defaultChecked`)、选中与未选中时显示的内容 (`checkedInfo`, `uncheckedInfo`)、是否禁用 (`disabled`) 及双向绑定 (`v-model`) 控制选中状态 (`checked`)。通过简单配置即可实现功能丰富的开关控件。

可自定义设置以下属性:

  • 初始是否选中(defaultChecked),默认 false

  • 选择时的内容(checkedInfo),默认 null

  • 未选中时的内容(uncheckedInfo),默认 null

  • 是否禁用(disabled),默认 false

  • (v-model)指定当前是否选中(checked),默认 null

效果如下图:

①创建开关组件Switch.vue:

<template>
  <div class="m-switch-wrap">
    <div @click="disabled ? e => e.preventDefault() : onSwitch()" :class="['m-switch', { 'switch-checked': checkedVal, 'disabled': disabled }]">
      <div :class="['u-switch-inner', checkedVal ? 'inner-checked' : 'inner-unchecked' ]">{
  { checkedVal ? checkedInfo : uncheckedInfo }}</div>
      <div :class="['u-node', { 'node-checked': checkedVal }]"></div>
    </div>
  </div>
</template>
<script>
export default {
  name: 'Switch',
  model: {
    prop: 'checked',
    event: 'change'
  },
  props: {
    defaultChecked: { // 初始是否选中
      type: Boolean,
      default: false
    },
    checkedInfo: { // 选中时的内容
      type: [Number, String],
      default: null
    },
    uncheckedInfo: { // 未选中时的内容
      type: [Number, String],
      default: null
    },
    disabled: { // 是否禁用
      type: Boolean,
      default: false
    },
    checked: { // (v-model)指定当前是否选中
      type: Boolean,
      default: null
    }
  },
  data () {
    return {
      checkedVal: null
    }
  },
  watch: {
    checked () {
      this.initSwitcher()
    },
    defaultChecked () {
      this.initSwitcher()
    }
  },
  created () {
    this.initSwitcher()
  },
  methods: {
    initSwitcher () {
      if (typeof this.checked === 'boolean') {
        this.checkedVal = this.checked
      } else if (typeof this.checked === 'object') {
        this.checkedVal = this.defaultChecked
      }
    },
    onSwitch () {
      this.checkedVal = !this.checkedVal
      this.$emit('change', this.checkedVal)
    }
  }
}
</script>
<style lang="less" scoped>
@themeColor: #1890FF;
.m-switch-wrap {
  height: 22px;
  min-width: 44px;
  display: inline-block;
  .m-switch {
    position: relative;
    height: 22px;
    color: rgba(0,0,0,.65);
    font-size: 14px;
    background: rgba(0,0,0,.25);
    border-radius: 100px;
    cursor: pointer;
    transition: background .36s;
    .u-switch-inner {
      display: inline-block;
      color: #fff;
      font-size: 14px;
      line-height: 22px;
      padding: 0 8px;
      transition: all .36s;
    }
    .inner-checked {
      margin-right: 18px;
    }
    .inner-unchecked {
      margin-left: 18px;
    }
    .u-node {
      position: absolute;
      top: 2px;
      left: 2px;
      width: 18px;
      height: 18px;
      background: #FFF;
      border-radius: 100%;
      cursor: pointer;
      transition: all .36s;
    }
    .node-checked { // 结果等价于right: 2px; 为了滑动效果都以左边为基准进行偏移
      left: 100%;
      margin-left: -2px;
      transform: translateX(-100%);
    }
  }
  .switch-checked {
    background: @themeColor;
  }
  .disabled {
    cursor: not-allowed;
    opacity: .4;
  }
}
</style>

②在要使用的页面引入组件:

<Switch :defaultChecked="true" v-model="checked" checkedInfo="开" uncheckedInfo="关" :disabled="false" />
import Switch from '@/components/Switch'
export default {
    name: 'Index',
    components: {
        Switch
    },
    data () {
        return {
             checked: true
        }
    }
}
相关文章
|
4月前
|
JavaScript 前端开发
vue element plus Switch 开关
vue element plus Switch 开关
165 0
|
21天前
Vue3开关(Switch)
这是一个可高度定制的开关组件,支持设置选中与未选中时的内容、值、大小、加载状态、禁用状态及点击波纹颜色等属性。组件提供了多种尺寸选择,并允许自定义图标与样式,适用于多种场景下的开关功能实现。[在线预览](https://themusecatcher.github.io/vue-amazing-ui/guide/components/switch.html)展示了其丰富的配置选项和实际效果。
Vue3开关(Switch)
|
19天前
|
前端开发 UED
|
2月前
|
JavaScript API
【Element-UI】vue使用 this.$confirm区分取消与关闭,vue给this.$confirm设置多个按钮
【Element-UI】vue使用 this.$confirm区分取消与关闭,vue给this.$confirm设置多个按钮
159 0
|
4月前
|
JavaScript
Vue控制是否禁用disabled属性
Vue控制是否禁用disabled属性
65 1
|
4月前
|
移动开发 JavaScript 小程序
uView Switch 开关选择器
uView Switch 开关选择器
42 1
|
4月前
|
移动开发 JavaScript 小程序
uniapp中组件库丰富的Switch 开关选择器使用方法
uniapp中组件库丰富的Switch 开关选择器使用方法
335 1
|
4月前
|
JavaScript 前端开发 小程序
react-router4.2使用js控制路由跳转的3种方式
react-router4.2使用js控制路由跳转的3种方式
|
11月前
|
前端开发 UED
React-Router-Switch
React-Router-Switch
61 0
|
API 数据安全/隐私保护
Vue--ElementUI实现退出功能
Vue--ElementUI实现退出功能