美文网首页
、写的一个Button组件

、写的一个Button组件

作者: 前端人 | 来源:发表于2023-04-18 10:09 被阅读0次

    让大家看看 我只是给了一个命令 用js vue写一个考虑了10种场景的Button组件,就得到了下面的结果。完胜人类写手。感觉以后人类只需要优化代码。

    但是程序员不会完全实业 应该是会招聘减少。要求提高。

    <template>
      <button
        :class="[
          'btn',
          typeClass, // 根据type选择不同的颜色
          sizeClass, // 根据size选择不同的大小
          { 'btn-block': block }, // 是否为块级元素
          { 'btn-outline': outline }, // 是否为线框按钮
          { 'btn-loading': loading }, // 是否显示loading
          { disabled } // 是否禁用按钮
        ]"
        :disabled="disabled || loading"
        @click="onClick"
      >{{ loading ? loadingText : text }}</button>
    </template>
    <script>
    export default {
      name: 'Button',
      props: {
        text: {
          type: String,
          required: true
        },
        type: {
          type: String,
          default: 'default' // 按钮的颜色类型,可选值有primary、danger、warning、success、default
        },
        size: {
          type: String,
          default: '' // 按钮的大小,可选值有large、small、default
        },
        loadingText: {
          type: String,
          default: 'Loading...' // loading状态下显示的文本
        },
        block: {
          type: Boolean,
          default: false // 是否为块级元素
        },
        outline: {
          type: Boolean,
          default: false // 是否为线框按钮
        },
        disabled: {
          type: Boolean,
          default: false // 是否禁用按钮
        },
        loading: {
          type: Boolean,
          default: false // 是否显示loading
        }
      },
      computed: {
        typeClass() {
          switch (this.type) {
            case 'primary':
              return 'btn-primary';
            case 'danger':
              return 'btn-danger';
            case 'warning':
              return 'btn-warning';
            case 'success':
              return 'btn-success';
            default:
              return 'btn-default';
          }
        },
        sizeClass() {
          switch (this.size) {
            case 'large':
              return 'btn-lg';
            case 'small':
              return 'btn-sm';
            default:
              return '';
          }
        }
      },
      methods: {
        onClick() {
          if (!this.loading && !this.disabled) {
            this.$emit('click');
          }
        }
      }
    };
    //以上代码实现了10种使用场景的Button组件,包括:预设基本样式、颜色分类、自适应、大小分类、
    //禁用状态、loading状态、块级元素、线框按钮、点击事件和传递文本。如需要添加其他功能,可以在此基础上进行修改。
    </script>
    <style scoped>
    .btn {
      display: inline-block;
      padding: 0.5rem 1rem;
      font-size: 1rem;
      border-radius: 0.3rem;
      cursor: pointer;
      transition: all 0.2s;
      text-align: center;
    }
    
    .btn-outline {
      background-color: transparent;
      border: 2px solid currentColor;
    }
    
    .btn-primary {
      background-color: #007bff;
      color: #fff;
      border-color: #007bff;
    }
    
    .btn-danger {
      background-color: #dc3545;
      color: #fff;
      border-color: #dc3545;
    }
    
    .btn-warning {
      background-color: #ffc107;
      color: #fff;
      border-color: #ffc107;
    }
    
    .btn-success {
      background-color: #28a745;
      color: #fff;
      border-color: #28a745;
    }
    
    .btn-default {
      background-color: #fff;
      color: #6c757d;
      border-color: #ccc;
    }
    
    .btn-lg {
      padding: 0.5rem 1.5rem;
      font-size: 1.25rem;
    }
    
    .btn-sm {
      padding: 0.25rem 0.75rem;
      font-size: 0.875rem;
    }
    
    .btn-block {
      display: block;
      width: 100%;
    }
    
    .btn-loading {
      position: relative;
      pointer-events: none;
      user-select: none;
    }
    
    .btn-loading::after {
      content: '';
      position: absolute;
      top: 50%;
      left: 50%;
      width: 1.2em;
      height: 1.2em;
      margin-top: -0.6em;
      margin-left: -0.6em;
      border-radius: 50%;
      border: 0.2em solid currentColor;
      border-top-color: transparent;
      animation: spin 0.6s linear infinite;
    }
    
    @keyframes spin {
      to {
        transform: rotate(1turn);
      }
    }
    </style> 
    

    相关文章

      网友评论

          本文标题:、写的一个Button组件

          本文链接:https://www.haomeiwen.com/subject/ocuhjdtx.html