Vue按钮(Button)

news2024/11/24 22:27:41

可自定义设置以下属性:

  • 按钮默认文本(name),默认不设置时显示为'按钮'

  • 按钮类型(type),默认'default',另外可选'primary' 'danger'

  • 按钮悬浮变化效果(effect),只有type为default时,reverse才生效

  • 按钮尺寸(size),默认'middle',另外可选'small' 'large'

  • 按钮宽度(width),默认'auto'

  • 按钮高度(height),默认'auto'

  • 按钮圆角(borderRadius),默认4px

  • 按钮跳转目标URL地址(route),默认{},格式与<router-link>的to属性一致

  • 按钮如何打开目标URL,设置route时才起作用,默认'_self'

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

  • 是否将按钮设置为块级元素并居中展示(center),默认false

效果如下图:

①创建按钮组件Button.vue:

<template>
  <span :class="['m-button', {'center': center}]">
    <router-link
      v-if="isRoute"
      :to="route"
      :target="target"
      :disabled="disabled"
      class="u-button fade"
      :class="[type, size, {[effect]: type === 'default', widthType: width, disabled: disabled}]"
      :style="{borderRadius: borderRadius + 'px', width: (width - 2) + 'px', height: (height - 2)+'px', lineHeight: (height - 2)+'px'}">
      <slot>{{ name }}</slot>
    </router-link>
    <a
      v-else
      @click="$emit('click')"
      :disabled="disabled"
      class="u-button"
      :class="[type, size, {[effect]: type === 'default', widthType: width, disabled: disabled}]"
      :style="{borderRadius: borderRadius + 'px', width: (width - 2) + 'px', height: (height - 2)+'px', lineHeight: (height - 2)+'px'}">
      <slot>{{ name }}</slot>
    </a>
  </span>
</template>
<script>
export default {
  name: 'Button',
  props: {
    name: { // 按钮默认文本
      type: String,
      default: '按钮'
    },
    type: { // 按钮类型
      type: String,
      default: 'default' // 'default' 'primary' 'danger'
    },
    effect: { // 按钮悬浮变化效果,只有type为default时,reverse才生效
      type: String,
      default: 'fade' //  'fade' 'reverse'
    },
    size: { // 按钮尺寸
      type: String,
      default: 'middle' // 'small' 'middle' 'large'
    },
    width: { // 按钮宽度
      type: [Number, String],
      default: 'auto'
    },
    height: { // 按钮高度
      type: [Number, String],
      default: 'auto'
    },
    borderRadius: { // 按钮圆角
      type: Number,
      default: 4
    },
    route: { // 按钮跳转目标URL地址
      type: Object,
      default: () => {
        return {}
      }
    },
    target: { // 按钮如何打开目标URL,设置route时才起作用
      type: String,
      default: '_self'
    },
    disabled: { // 按钮是否禁用
      type: Boolean,
      default: false
    },
    center: { // 是否将按钮设置为块级元素并居中展示
      type: Boolean,
      default: false
    }
  },
  computed: {
    isRoute () {
      if (JSON.stringify(this.route) === '{}') {
        return false
      } else {
        return true
      }
    }
  }
}
</script>
<style lang="less" scoped>
@primary: #1890ff;
@danger: #ff4d4f;
.m-button {
  display: inline-block;
  .u-button {
    display: inline-block;
    color: rgba(0,0,0,.65);
    background-color: #fff;
    border: 1px solid #d9d9d9;
    box-shadow: 0 2px 0 rgb(0 0 0 / 2%);
    transition: all .3s cubic-bezier(.645,.045,.355,1);
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
    cursor: pointer;
  }
  .primary {
    color: #fff;
    background-color: @primary;
    border-color: @primary;
    text-shadow: 0 -1px 0 rgb(0 0 0 / 12%);
    box-shadow: 0 2px 0 rgb(0 0 0 / 5%);
    &:hover {
      background-color: #40a9ff;
      border-color: #40a9ff;
    }
    &:active {
      background-color: #096dd9;
      border-color: #096dd9;
    }
  }
  .default {
    .fade();
  }
  .danger {
    color: #fff;
    background-color: @danger;
    border-color: @danger;
    text-shadow: 0 -1px 0 rgb(0 0 0 / 12%);
    box-shadow: 0 2px 0 rgb(0 0 0 / 5%);
    &:hover {
      background-color: #ff7875;
      border-color: #ff7875;
    }
    &:active {
      background-color: #d9363e;
      border-color: #d9363e;
    }
  }
  .fade {
    &:hover {
      color: #40a9ff;
      border-color: #40a9ff;
    }
    &:active {
      color: #096dd9;
      border-color: #096dd9;
    }
  }
  .reverse {
    &:hover {
      color: #fff;
      background-color: #40a9ff;
      border-color: #40a9ff;
    }
    &:active {
      color: #fff;
      background-color: #096dd9;
      border-color: #096dd9;
    }
  }
  .small {
    height: 24px;
    line-height: 24px;
    padding: 0 7px;
    font-size: 14px;
  }
  .middle {
    height: 32px;
    line-height: 32px;
    padding: 0 15px;
    font-size: 14px;
  }
  .large {
    height: 40px;
    line-height: 40px;
    padding: 0 15px;
    font-size: 16px;
  }
  .widthType {
    padding: 0;
    text-align: center;
  }
  .disabled {
    color: rgba(0, 0, 0, 0.25);
    background-color: #f5f5f5;
    border-color: #d9d9d9;
    text-shadow: none;
    box-shadow: none;
  }
}
.center {
  display: block;
  text-align: center;
}
</style>

②在要使用的页面引入:

<Button
    type="default"
    effect="reverse"
    size="middle"
    :width="120"
    :height="40"
    :borderRadius="4"
    :disabled="false"
    :center="false"
    @click="onClick">
    按钮Button
</Button>
import Button from '@/components/Button'
components: {
    Button,
},
methods: {
    onClick () {
      console.log('click')
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/68846.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TokenFusion 代码

只看语义分割。 # --------------------------------------------------------------- # Copyright (c) 2021, NVIDIA Corporation. All rights reserved. # # This work is licensed under the NVIDIA Source Code License # ----------------------------------------------…

UNIAPP实战项目笔记48 确认支付页面的布局

UNIAPP实战项目笔记48 确认支付页面的布局 实际案例图片 显示确认支付页面布局 具体内容图片自己替换哈&#xff0c;随便找了个图片的做示例 具体位置见目录结构 完善布局页面和样式 代码 payment.vue部分 payment.vue 确认订单页面布局和渲染 <template><view>…

(六) Docker容器数据卷

Docker容器数据卷一、概述二、作用三、宿主与容器之间映射添加容器卷四、读写规则映射添加五、卷的继承和共享注意点 容器卷记得加入 --privilegedtrueDocker挂载主机目录访问如果出现错误信息&#xff1a;cannot open directory .: Permission denied 解决办法&#xff1a;在…

日本掀起“淘金热”!亚马逊、Ebay、Shopee、Starday先后开炮,卖家如何分食跨境新蓝海?

众所周知&#xff0c;日本电商较欧美等国发展较晚&#xff0c;但日本凭借全球第三经济总量&#xff0c;极高的网络覆盖率、国土面积小、人口集中、物流基础设施成熟等优势&#xff0c;给日本消费者网购创造了完美的环境&#xff0c;近年来网络购物增长极为迅速。路透社报道称&a…

Python——基础知识(1)

前面主要讲解了javaEE的基础知识&#xff0c;基本上可以用servlet写一些简单的网页程序&#xff0c;后续的博客将围绕spring进行讲解&#xff0c;并且其中穿插一些python的知识 变量 命名 和其他的编程语言一样&#xff0c;java的变量命名需要遵循下面几个原则 由数字&…

HCI OPCDE

HCI控制命令由两个字节的OpCode定义&#xff0c;每个OpCode由一个字节的OGF&#xff08;OpCode Group Field&#xff09;和一个字节的OCF&#xff08;OpCode Command Field&#xff09;组成。参考&#xff1a; HCI Command Packet Command的数据包格式如下图&#xff1a; 其中…

GoWeb 进阶的实战项目,基于 Iris 框架实现 JWT 认证(附案例全代码)

1、前言 我们知道&#xff0c;http协议本身是一种无状态的协议&#xff0c;而这就意味着如果用户向我们的应用提供了用户名和密码来进行用户认证&#xff0c;那么下一次请求时&#xff0c;用户还要再一次进行用户认证才行&#xff0c;因为根据http协议&#xff0c;我们并不能知…

【强化学习论文合集】七.2017神经信息处理系统大会论文(NIPS2017)

强化学习(Reinforcement Learning, RL),又称再励学习、评价学习或增强学习,是机器学习的范式和方法论之一,用于描述和解决智能体(agent)在与环境的交互过程中通过学习策略以达成回报最大化或实现特定目标的问题。 本专栏整理了近几年国际顶级会议中,涉及强化学习(Rein…

如何制作Docker镜像

一般有两种方式来制作自己的 Docker 镜像 基于现有的 Docker 镜像&#xff0c;安装自己的软件环境后&#xff0c;完成制作从零开始用 Dockerfile 来制作 宿主机环境 Ubuntu 18.04 x86_64 基于现有Docker镜像来制作 首先要获得一个基本的 Docker 镜像 使用 ”docker pull“…

【C++笔试强训】第三天

选择题 1.以下程序的输出结果是&#xff08;&#xff09; #include <stdio.h> int main() {char a[10] {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, *p;int i;i 8;p a i;printf("%s\n", p - 3); }A 6 B 6789 C ‘6’ D 789 a是数组名&#xff0c;所以指向数组首元…

p4实现负载均衡

实验要求 基于简单版本的等成本多路径转发实现一种负载平衡。实现的交换机将使用两个表将数据包随机转发到两个目标主机之一第一个表将使用哈希函数&#xff08;应用于由源和目标IP地址、IP协议以及源和目标TCP端口组成的5元组&#xff09;来选择两个主机中的一个第二个表将使…

gnn神经网络是什么,gnn神经网络代码

1、gnn什么意思? 指图形神经网络。 生物神经网络主要是指人脑的神经网络&#xff0c;它是人工神经网络的技术原型。人脑是人类思维的物质基础&#xff0c;思维的功能定位在大脑皮层&#xff0c;后者含有大约10^11个神经元。 每个神经元又通过神经突触与大约103个其它神经元…

永磁同步电机(PMSM)磁场定向控制(FOC)及Matlab/Simulink仿真分析

文章目录前言一、FOC的基本原理二、坐标变换2.1.Clark坐标变换2.2.Park坐标变换三、永磁同步电机在同步旋转坐标系下的数学模型四、永磁同步电机磁场定向控制Matlab/Simulink仿真分析4.1.电压开环控制4.1.1.仿真电路分析4.1.2.仿真结果分析4.2.电流闭环控制4.2.1.仿真电路分析4…

两个月吃透阿里P9推荐260页SpringBoot2企业应用实战pdf入职定P6+

前言 都说程序员工资高、待遇好&#xff0c; 2022 金九银十到了&#xff0c;你的小目标是 30K、40K&#xff0c;还是 16薪的 20K&#xff1f;作为一名 Java 开发工程师&#xff0c;当能力可以满足公司业务需求时&#xff0c;拿到超预期的 Offer 并不算难。然而&#xff0c;提升…

Ansys Zemax | 使用OpticStudio进行闪光激光雷达系统建模(下)

在消费类电子产品领域&#xff0c;工程师可利用激光雷达实现众多功能&#xff0c;如面部识别和3D映射等。尽管激光雷达系统的应用非常广泛而且截然不同&#xff0c;而“闪存激光雷达”解决方案适用于在使用固态光学元件的目标场景中生成可检测的点阵列。 凭借在针对小型封装获…

「Redis」08 主从复制

笔记整理自【尚硅谷】Redis 6 入门到精通 超详细 教程 Redis——主从复制 1. 简介 主机数据更新后根据配置和策略&#xff0c; 自动同步到备机的 master/slaver 机制&#xff0c;Master 以写为主&#xff0c;Slaver 以读为主。 主从复制的好处 读写分离&#xff0c;性能扩展…

利用styleSheet,避免js手动频繁修改样式

styleSheet是一个样式表&#xff0c;记录了一个html文件中<style>标签中的样式 &#x1f5a8;️体感styleSheet 对于下面一个html文件 <!DOCTYPE html> <html lang"en"><head><style>h1 {color: red;}div {color: green; }</styl…

VMware替换难?听听ZStack 的这3家制造业客户怎么说……

随着国家对信创转型的持续扶持&#xff0c;加之VMware原有的产品与客户云建设需求的契合度不高&#xff0c;越来越多的用户选择将自身的IT系统替换为国产化的信创产品&#xff0c;且已经在金融、交通、制造业、教育、房地产等领域落地出现从VMware迁移转型的成功案例。在此趋势…

Python实战案例,PyQt5+socket模块,Python制作小型桌面应用

前言 本文给大家分享的是如何通过用PyQt5制作小型桌面应用 PyQt概述 PyQt5是Qt框架的Python语言实现&#xff0c;由Riverbank Computing开发&#xff0c;是最强大的GUI库之一。PyQt提供了一个设计良好的窗口控件集合&#xff0c;每一个PyQt控件都对应一个Qt控件&#xff0c;…

js实现的在线绘图板,写字板

一个像素完美的基于web的MS Paint重制版和更多…试试看&#xff01; JS Paint高度逼真地再现了MS Paint的每个工具和菜单&#xff0c;甚至是鲜为人知的功能。 它支持主题、其他文件类型和辅助功能&#xff0c;如眼睛注视模式和语音识别。 在线demo地址在线绘图板&#xff0c;在…