微信小程序存在Button組件
微信小程序原生存在Button組件,而且樣式也不醜,拓展屬性也很多,只要去看文檔,一邊看一邊試,還是很容易構造一個理想的按鈕Button出來。微信小程序Button傳送門。
但是某些時候可能也會覺得原生Button組件配置過於複雜,或者並不滿足當前需求,那麼就可能需要自定義一個Button組件了。
好的,開始
比如想要這樣的效果。
- 擁有五種不同的顏色
- 擁有三種不同的大小
- 擁有鏤空效果
- 可以圓角
- 可以禁用
- 可以設置圖標
上代碼
第一步,創建組件
首先打開編輯器,這裏就打開微信開發者工具吧,然後創建一個組件,像這樣我這裏用的是Vscode然後用到了less,和easyLess插件自動編譯less爲wxss樣式。
第二步,控制結構和樣式
結構中需要注意:
- 文字應該居中顯示,所以此處可能需要使用flex佈局方便些
- 需要預留圖標位置,沒有設置時,則不顯示
- 需要設置背景顏色控制選項
- 注意結構和樣式對應即可
<button
class="pm-button pm-button--{{size}} pm-button--{{type}} {{plain?'pm-button--plain':''}} {{round?'pm-button--round':''}} {{disabled?'pm-button--disabled':''}}"
style="{{cStyle}}"
bindtap="clickHandler"
>
<pm-icon icon="{{icon}}" color="{{iconColor}}" size="{{iconSize}}" wx:if="{{icon}}"></pm-icon>
<slot/>
</button>
.pm-button {
border-radius: 0;
font-weight: normal;
display: flex;
flex-flow: row nowrap;
justify-content: center;
align-items: center;
white-space: nowrap;
}
.pm-button:not([size='mini']) {
width: 0;
}
.pm-button--normal {
width: 80px !important;
height: 40px;
font-size: 16px;
}
.pm-button--normal.pm-button--round {
border-radius: 40px;
}
.pm-button--small {
width: 60px !important;
height: 30px;
font-size: 14px;
}
.pm-button--small.pm-button--round {
border-radius: 30px;
}
.pm-button--mini {
width: 40px !important;
height: 20px;
font-size: 12px;
}
.pm-button--mini.pm-button--round {
border-radius: 20px;
}
.pm-button--primary {
background-color: #1989fa;
border: 1px solid #1989fa;
color: white;
}
.pm-button--primary.pm-button--plain {
color: #1989fa;
}
.pm-button--success {
background-color: #07c160;
border: 1px solid #07c160;
color: white;
}
.pm-button--success.pm-button--plain {
color: #07c160;
}
.pm-button--danger {
background-color: #ee0a24;
border: 1px solid #ee0a24;
color: white;
}
.pm-button--danger.pm-button--plain {
color: #ee0a24;
}
.pm-button--warning {
background-color: #ff976a;
border: 1px solid #ff976a;
color: white;
}
.pm-button--warning.pm-button--plain {
color: #ff976a;
}
.pm-button--default {
background-color: #ffffff;
border: 1px solid #ebedf0;
color: black;
}
.pm-button--primary:active,
.pm-button--success:active,
.pm-button--danger:active,
.pm-button--warning:active,
.pm-button--default:active {
opacity: 0.8;
}
.pm-button--default:active {
background-color: #ebedf0;
}
.pm-button--plain {
background-color: transparent;
}
.pm-button--plain:active {
opacity: 1!important;
background-color: #ebedf0;
}
.pm-button--disabled {
opacity: 0.6;
}
.pm-button--disabled:active {
opacity: 0.6 !important;
}
.pm-button--disabled.pm-button--plain:active,
.pm-button--disabled.pm-button--default:active {
background-color: transparent;
}
第三步,邏輯處理
Component({
/**
* 組件的屬性列表
*/
properties: {
size: {
type: String,
value: 'normal'
},
type: {
type: String,
value: 'primary'
},
plain: Boolean,
disabled: Boolean,
round: Boolean,
cStyle: String,
icon: String,
iconColor: String,
iconSize: String
},
/**
* 組件的方法列表
*/
methods: {
clickHandler() {
!this.data.disabled && this.triggerEvent('click', {})
}
}
})