从零撸一个pc端vue的ui组件库( 计数器组件 )

2020-06-14 06:20:26易采站长站整理

4: 关于样式的判定

在计算属性里面我们队当前值进行了监控, 返回的是置灰的颜色, 这个让用户自定的意义不大, 所以直接写了.


computed: {
valueMin() {
if (this.value === this.min) return "#bbbbbb";
return "";
},
valueMax() {
if (this.value === this.max) return "#bbbbbb";
return "";
}
},

dom, 点击到了最大值的话就会置灰, 我们上面已经阻止了继续点击的渲染


<cc-icon size='25px'
name='cc-add2'
:color="valueMax" />

做点有意思的事

slot是个自由度很高的标签

把左右按钮都包上, 让用户可以自己定义显示的标签是什么样子的


<div class="cc-input-number__reduce"
@click='reduce'>
<slot name='left'>
<cc-icon size='25px'
name='cc-reduce2'
:color='valueMin' />
</slot>
</div>
vue-cc-ui/src/style/inputNumber.scss

@import './common/var.scss';
@import './common/extend.scss';
@import './common/mixin.scss';
@import './config/index.scss';

@include b(input-number) {
// 友好的小手
cursor: pointer;
// 有个放大动画, 看过我文章的同学都知道, 操作类的组件, 我喜欢有一个悬停放大效果.
transition:all .1s;
align-items: center;
display: inline-flex;
background-color: white;
&:hover {
// 放大被其他组件挡住就划不来了
z-index: 6;
transform: scale(1.2);
}
// 招牌阴影
@include commonShadow($--color-black);
@include e(add) {
@include flexCenter();
padding: 4px 6px;
}
@include e(reduce) {
@include flexCenter();
padding: 4px 6px;
}
@include e(input) {
// 去掉输入框的默认样式
border: none;
outline:none;
display: block;
text-align: center;
width:60px;
height: 20px;
}
}

效果展示

end

总的来说是这些组件中比较简单的一个了, 有些坑能够让我更好的学习vue以及前端的思想, 总的来说挺有趣的.

大家继续一起学习,一起进步, 早日实现自我价值!!

下一集准备聊聊 tab切换组件的相关知识;

github: 链接描述