2019独角兽企业重金招聘Python工程师标准>>>
##LXCheckboxGroup复选框
微信小程序官方提供的checkbox有点丑,于是就写了这个。
思路:
1.checkboxGroup里包着一个checkbox view组件
2.每个checkbox里都包含一个icon与text
3.icon与text点击都会选中,类似于label for的用法,icon样式会切换状态。normal与highlight状态,对应的值赋予icon的type属性。
4.每个checkbox的view都有一个value属性与text属性,分别对应实现值与字面显示,只转递前者作为数据交互。view设定2个属性,data-value与data-text。
5.每次点击都会将checkbox的value值存在到checkedValues数组中
步骤:
- 设置布局,使用文字与图标垂直居中,左间距4px,每个独占一行。
布局文件
样式表
/*整个复选框组容器*/
.lxCheckboxGroup {width: 80px;height: 26px;margin:20px auto;
}/*单个复选框容器*/
.lxCheckboxGroup view {/*上下间距4px*/margin: 4px auto;
}/*复选框图标*/
.lxCheckboxGroup icon {/*text用block描述,所以要左浮动*/float: left;
}/*文字标签样式*/
.lxCheckboxGroup text{font-size: 14px;/*20px是左按钮的大小,4px是真实的左间距*/margin-left: 24px;/*高亮与icon相等,实现垂直居中*/height: 20px;/*文本垂直居中*/line-height: 20px;/*块布局,否则文本高度无效*/display: block;
}
js代码
Page({data: {items: [{value: 'USA', text: '美国', type: 'circle'},{value: 'CHN', text: '中国', type: 'success_circle'},{value: 'BRA', text: '巴西', type: 'circle'},{value: 'JPN', text: '日本', type: 'circle'},{value: 'ENG', text: '英国', type: 'circle'},{value: 'TUR', text: '法国', type: 'circle'},]},bindCheckbox: function(e) {//绑定点击事件,将checkbox样式改变为选中与非选中console.log('s' + e.currentTarget.dataset.value);}
})
如图
- 响应点击事件
2.1 利用e.currentTarget.dataset.index传checkbox的index值,作点选与非点选操作,并将已选的values值单独存到数组checkedValues中,供返回提交等操作。
bindCheckbox: function(e) {/*绑定点击事件,将checkbox样式改变为选中与非选中*///拿到下标值,以在items作遍历指示用var index = parseInt(e.currentTarget.dataset.index);//原始的icon状态var type = this.data.items[index].type;var items = this.data.items;if (type == 'circle') {//未选中时items[index].type = 'success_circle';} else {items[index].type = 'circle';}// 写回经点击修改后的数组this.setData({items: items});// 遍历拿到已经勾选的值var checkedValues = [];for (var i = 0; i
- text也需要绑定bindCheckBox事件,产生label for的效果,但还可以更简单的处理,就是把事件绑在容器view上,这样点击更直观。
如下面代码:
正文完
源码下载:关注下方的公众号->回复数字1007
对小程序开发有趣的朋友关注公众号: huangxiujie85,QQ群: 581513218,微信: small_application,陆续还将推出更多作品。