Vue【原创】下划线动态效果按钮,一般按钮模式,开关切换模式
效果图:
1.icon-button 一般按钮模式:
1 <template>
2 <div class="icon-button" :style="{ color: font.color }" @click="onclick">
3 <i :class="[icon.type]" :style="{ color: icon.color, fontSize: icon.size }" class="right" v-if="showIcon"></i>
4 <slot>
5 <span class="text" :style="{ fontSize: font.size }">{{ title }}</span>
6 </slot>
7 </div>
8 </template>
9
10 <script>
11 export default {
12 name: 'LiloIconButton',
13 props: {
14 title: {
15 type: String,
16 default: '',
17 required: false
18 },
19 showIcon: {
20 type: Boolean,
21 default: true
22 },
23 icon: {
24 type: Object,
25 default() {
26 return {
27 type: 'el-icon-setting',
28 size: '1em',
29 color: '#00417a'
30 };
31 },
32 required: false
33 },
34 font: {
35 type: Object,
36 default() {
37 return {
38 size: '1em',
39 color: '#00417a'
40 };
41 },
42 required: false
43 }
44 },
45 data() {
46 return {
47 selected: true
48 };
49 },
50 methods: {
51 onclick() {
52 this.selected = !this.selected;
53 this.$emit('toggle', this.selected);
54 }
55 }
56 };
57 </script>
58
59 <style lang="scss" scoped>
60
61 $blue: #00417a;
62
63 .icon-button {
64 -webkit-transition: all 0.3s ease 0s;
65 transition: all 0.3s ease 0s;
66 cursor: pointer;
67 text-align: center;
68 display: inline-block;
69 -moz-user-select: none;
70 -webkit-user-select: none;
71 user-select: none;
72 .right{
73 margin-right: 3px;
74 }
75 &:after {
76 content: ' ';
77 // position: absolute;
78 z-index: 2;
79 // bottom: -5px;
80 margin-left: 50%;
81 margin-top: 2px;
82 display: block;
83 width: 100%;
84 height: 2px;
85 transform: translate(-50%);
86 }
87 &:hover:after {
88 height: 2px;
89 animation: add_width 0.2s ease forwards;
90 background: $blue;
91 }
92 @keyframes add_width {
93 from {
94 width: 0;
95 }
96 to {
97 width: 100%;
98 }
99 }
100 .text {
101 letter-spacing: 1px;
102 }
103 }
104 </style>
2.icon-switcher 开关切换按钮模式:
1 <template>
2 <div class="icon-switcher" :style="{ color: font.color }" :class="[selected ? 'active' : 'deactive']" @click="onclick">
3 <i :class="[icon.type]" :style="{ color: icon.color, fontSize: icon.size }" class="right"></i>
4 <slot>
5 <span class="text" :style="{ fontSize: font.size }">{{ title }}</span>
6 </slot>
7 </div>
8 </template>
9
10 <script>
11 export default {
12 name: 'LiloIconSwitcher',
13 props: {
14 title: {
15 type: String,
16 default: '',
17 required: false
18 },
19 icon: {
20 type: Object,
21 default() {
22 return {
23 type: 'el-icon-setting',
24 size: '1em',
25 color: '#00417a'
26 };
27 },
28 required: false
29 },
30 font: {
31 type: Object,
32 default() {
33 return {
34 size: '1em',
35 color: '#00417a'
36 };
37 },
38 required: false
39 },
40 checked: {
41 type: Boolean,
42 default: false,
43 required: false
44 }
45 },
46 data() {
47 return {
48 selected: this.checked
49 };
50 },
51 methods: {
52 onclick() {
53 this.selected = !this.selected;
54 this.$emit('toggle', this.selected);
55 }
56 }
57 };
58 </script>
59
60 <style lang="scss" scoped>
61
62 $blue: #00417a;
63
64 .icon-switcher {
65 -webkit-transition: all 0.3s ease 0s;
66 transition: all 0.3s ease 0s;
67 cursor: pointer;
68 text-align: center;
69 display: inline-block;
70 -moz-user-select: none;
71 -webkit-user-select: none;
72 user-select: none;
73 .right {
74 margin-right: 3px;
75 }
76 &.active {
77 &:after {
78 content: ' ';
79 z-index: 2;
80 margin-left: 50%;
81 margin-top: 2px;
82 display: block;
83 width: 100%;
84 height: 2px;
85 transform: translate(-50%);
86 background: $blue;
87 }
88 }
89 &.deactive {
90 &:after {
91 content: ' ';
92 z-index: 2;
93 margin-left: 50%;
94 margin-top: 2px;
95 display: block;
96 width: 100%;
97 height: 2px;
98 transform: translate(-50%);
99 }
100 }
101 &:hover:after {
102 height: 2px;
103 animation: add_width 0.2s ease forwards;
104 background: $blue;
105 }
106 @keyframes add_width {
107 from {
108 width: 0;
109 }
110 to {
111 width: 100%;
112 }
113 }
114 .text {
115 letter-spacing: 1px;
116 }
117 }
118
119 </style>
调用示例:
1 <div class="mt-10">
2 <lilo-icon-button class="mr-10" title="简单按钮"></lilo-icon-button>
3 <lilo-icon-button class="mr-10"><span>我是一个插槽</span></lilo-icon-button>
4 <lilo-icon-button
5 class="mr-10"
6 title="自定义按钮"
7 :icon="{ type: 'el-icon-upload', color: '#f56c6c', size: '1rem' }"
8 :font="{ color: '#5500ff', size: '1rem' }"
9 @toggle="toggle"
10 ></lilo-icon-button>
11 <lilo-icon-button class="mr-10" :showIcon="false"><span>不需要图标</span></lilo-icon-button>
12 </div>
13 <div class="mt-10">
14 <lilo-icon-switcher class="mr-10" title="切换按钮"></lilo-icon-switcher>
15 <lilo-icon-switcher class="mr-10"><span>我也是一个插槽</span></lilo-icon-switcher>
16 <lilo-icon-switcher
17 class="mr-10"
18 title="自定义切换按钮"
19 :icon="{ type: 'el-icon-loading', color: '#005500', size: '1rem' }"
20 :font="{ color: '#5500ff', size: '1rem' }"
21 :checked="true"
22 @toggle="toggle"
23 ></lilo-icon-switcher>
24 <lilo-icon-button class="mr-10" :showIcon="false"><span>不需要图标</span></lilo-icon-button>
25 </div>
Vue【原创】下划线动态效果按钮,一般按钮模式,开关切换模式的更多相关文章
- UI-切圆角、透明度、取消按钮点击高亮效果、按钮文字带下划线
一.切UIView的某个角为圆角 如果需要将UIView的4个角全部都为圆角,做法相当简单,只需设置其Layer的cornerRadius属性即可(项目需要使用QuartzCore框架).而若要指定某 ...
- 实现按钮跳转&下划线等
按钮点击跳转页面:(在java文件里写) 1 public class MainActivity extends AppCompatActivity { 2 3 private Button mbtn ...
- atitit.按钮光标滑过高亮切换以及其他动态效果的实现css html js --attilax总结
atitit.按钮光标滑过高亮切换以及其他动态效果的实现css html js --attilax总结 4. 鼠标越过动态图片切换实现 1 4.1. 优先模式::css模式... 1 4.2. 其次 ...
- _ 下划线 vue mixins 混入 变量前有下划线 变量不起作用
_ 下划线 vue mixins 混入 变量前有下划线 变量不起作用
- Textview下划线注册用户跳转实现
在xml中: <TextView android:id="@+id/textView_regtext" android:layout_width="wrap_con ...
- Android 如何自定义EditText 下划线?
项目要求: 笔者曾经做过一个项目,其中登录界面的交互令人印象深刻.交互设计师给出了一个非常作的设计,要求做出包含根据情况可变色的下划线,左侧有可变图标,右侧有可变删除标志的输入框,如图 记录制作过程: ...
- UILabletext去掉乱码 控制颜色 行高 自定义大小 。显示不同的字体颜色、字体大小、行间距、首行缩进、下划线等属性(NSMutableAttributedString)
text去掉乱码 设置不同颜色 行高 自定义大小 #import <Foundation/Foundation.h> @interface TextsForRow : NSObject @ ...
- Vue框架下的node.js安装教程
Vue框架下的node.js安装教程 python服务器.php ->aphche.java ->tomcat. iis -->它是一个可以运行JAVASCRIPTR 的运行环 ...
- Button的几种常用的xml背景,扁平化,下划线,边框包裹,以及按压效果
Button的几种常用的xml背景,扁平化,下划线,边框包裹,以及按压效果 分享下我项目中用到的几种Button的效果,说实话,还真挺好看的 一.标准圆角 效果是这样的 他的实现很简单,我们只需要两个 ...
- Android开发 ---SQLite数据库,lock文件,结果集游标,适配器,安全退出,给连接设置下划线,编辑器,投影,ContentValues存储,DbHelper,activity栈
目录截图: 1.activity_main.xml 主界面效果: <?xml version="1.0" encoding="utf-8"?> &l ...
随机推荐
- Windows server 2012 r2 激活方法
slmgr /ipk W3GGN-FT8W3-Y4M27-J84CP-Q3VJ9 slmgr /skms kms.03k.org slmgr /ato
- js 关于 replace 取值、替换第几个匹配项
〇.前言 在日常开发中,经常遇到针对字符串的替换.截取,知识点比较碎容易混淆,特此总结一下,仅供参考. 一.替换第一个匹配项 字符串替换 let strtest = "0123测试repla ...
- AcWing 3956. 截断数组
给定一个长度为 n 的数组 a1,a2,-,an. 现在,要将该数组从中间截断,得到三个非空子数组. 要求,三个子数组内各元素之和都相等. 请问,共有多少种不同的截断方法? 输入格式 第一行包含整数 ...
- Ubuntu22.04 安装单机版kubernetes
前言 上期讲到要实现.net 6框架下的EF Core操作数据库基本增删改查,没有及时兑现.没有兑现的原因就是因为安装kubernetes.安装kubernetes的过程是灾难性的,也是十分顺利的.灾 ...
- 代码随想录算法训练营Day17二叉树|110.平衡二叉树 257. 二叉树的所有路径 404.左叶子之和
优先掌握递归 110.平衡二叉树 题目链接:110.平衡二叉树 给定一个二叉树,判断它是否是高度平衡的二叉树. 本题中,一棵高度平衡二叉树定义为: 一个二叉树_每个节点_ 的左右两个子树的高度差的绝对 ...
- 软件测试从小白进阶高手-Python自动化+Jmeter性能+App项目+接口测试
软件测试从小白进阶高手-Python自动化+Jmeter性能+App项目+接口测试 软件测试技能,包括Python自动化.Jmeter性能测试.App项目测试.接口测试.接下来,我将从每个技能点给出一 ...
- CF1817E Half-sum 另解与 Trygub Number
一题水两篇怎么说. 上一篇中我们采用智慧方法减少了比较次数,避免了使用复杂的高精度数.现在我们有高论!可以做到 \(\mathrm O(\log_B V\log_2 n)\) 在某一位加或者减一个大小 ...
- 手写数字识别系统Python+CNN卷积神经网络算法【完整代码】
一.介绍 手写数字识别系统,使用Python语言,基于TensorFlow搭建CNN卷积神经网络算法对数据集进行训练,最后得到模型,并基于FLask搭建网页端界面,基于Pyqt5搭建桌面端可视化界面. ...
- FPGA加速技术:在数据中心和云计算中的应用
目录 1. 引言 2. 技术原理及概念 3. 实现步骤与流程 3.1 准备工作:环境配置与依赖安装 3.2 核心模块实现 3.3 集成与测试 4. 应用示例与代码实现讲解 4.1. 应用场景介绍 4. ...
- 自然语言处理 Paddle NLP - 任务式对话系统-理论
什么是任务型对话: 任务型:用于帮助用户完成某领域的特定任务,例如订餐.查天气.订票等 闲聊型:也称作开放域对话系统,目标是让用户持续的参与到交互过程,提供情感陪伴 问答型:提供知识满足,具体类型比较 ...