vue.js开发之开关(switch)组件( 自定义 )

Posted 写手在作画

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue.js开发之开关(switch)组件( 自定义 )相关的知识,希望对你有一定的参考价值。

。。。啥也不说了,难受啊

toggle-switch.vue

<template>
  <label role="checkbox" :class="[\'switch\', { toggled }]">
    <input type="checkbox"
           class="switch-input"
           @change="toggle"/>
    <div class="switch-core"
         :style="{backgroundColor: toggled ? colorChecked  : colorUnchecked}">
      <div class="switch-button"
           :style="{transition: `transform ${speed}ms`,
           transform: toggled ? null: `translate3d(32px, 0px, 0px)`}">
      </div>
    </div>
    <span class="switch-label label-right"
          v-if="toggled"
          v-html="labelChecked">
     </span>
    <span class="switch-label label-left"
          v-html="labelUnchecked" v-else>
    </span>
  </label>
 
</template>
 
<script>
  export default {
    name: \'ToggleSwitch\',
    data () {
      return {
        toggled: this.value,
        colorChecked: \'#25b9e9\',
        colorUnchecked: \'#db572e\',
        labelChecked: \'\',
        labelUnchecked: \'\'
      }
    },
    props: {
      value: {
        type: Boolean,
        default: true
      },
      speed: {
        type: Number,
        default: 100
      }
    },
    methods: {
      toggle (event) {
        this.toggled = !this.toggled
        this.$emit(\'change\', event)
      }
    }
  }
</script>
 
<style lang="scss" scoped>
 
  .switch {
    display: inline-block;
    position: relative;
    overflow: hidden;
    vertical-align: middle;
    user-select: none;
    font-size: 10px;
    cursor: pointer;
 
    .switch-input {
      display: none;
    }
 
    .switch-label {
      position: absolute;
      top: 0;
      font-weight: 600;
      color: white;
 
      z-index: 2;
 
      &.label-left {
        left: 10px;
        line-height: 20px;
        border-top-left-radius: 2px;
        border-bottom-left-radius:2px;
      }
 
      &.label-right {
        right: 10px;
        line-height: 20px;
        border-top-right-radius: 2px;
        border-bottom-right-radius:2px;
      }
    }
 
    .switch-core {
      display: block;
      position: relative;
      box-sizing: border-box;
      outline: 0;
      margin: 0;
      transition: border-color .3s, background-color .3s;
      user-select: none;
      width: 64px;
      height: 20px;
      border-radius: 4px;
      line-height: 20px;
 
      .switch-button {
        width: 32px;
        height: 20px;
        display: block;
        position: absolute;
        overflow: hidden;
        top: 0;
        left: 0;
        z-index: 3;
        transform: translate3d(0, 0, 0);
        background-color: #ecf0f5;
      }
    }
  }
</style>

App.vue

<template>
  <div id="app">
    <div class="left">
      <toggle-switch></toggle-switch>
    </div>
    <div class="main">
      <router-view></router-view>
    </div>
  </div>
</template>
 
<script>
  import ToggleSwitch from \'@/components/toggle-switch\'
  export default {
    name: \'app\',
    components: {
      ToggleSwitch
    }
  }
</script>
 
<style>
  #app {
    font-family: \'Microsoft YaHei\',\'Avenir\', Helvetica, Arial, sans-serif;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
    text-align: left;
    color: #2c3e50;
    height:100%;
  }
 
  .left {
    margin: 50px 200px;
  }
  .main{
    float:left;
    width:95%;
    background-color: #EFF2F7;
    height:100%;
    overflow: auto;
 
  }
</style>

 

 

以上是关于vue.js开发之开关(switch)组件( 自定义 )的主要内容,如果未能解决你的问题,请参考以下文章

React Native组件之Switch和Picker和Slide

vue.js(19)--vue中子组件调用父组件的方法

微信小程序组件解读和分析:十switch 开关选择器

vue.js之组件

微信小程序把玩(二十一)switch组件

Flutter -- 基础组件单选开关(Switch)& 单选框(Radio) & 复选框(Checkbox)