zoukankan      html  css  js  c++  java
  • vue.js开发之开关(switch)组件

         最近开发组件的时候,自定义开发了开关(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;
           64px;
          height: 20px;
          border-radius: 4px;
          line-height: 20px;
    
          .switch-button {
             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;
        95%;
        background-color: #EFF2F7;
        height:100%;
        overflow: auto;
    
      }
    </style>
    

      

  • 相关阅读:
    关于sqrt函数的使用
    电子商务
    随笔
    哈哈
    整体管理
    软件产品质量特性
    问题
    风险
    antd
    Flex布局大作用
  • 原文地址:https://www.cnblogs.com/chenyablog/p/7929260.html
Copyright © 2011-2022 走看看