微信小程序时间标签与范围联动设计实现?最近忙于一个有关数据管理的微信小程序开发,遇到了上图情况,虽然很简单,还是整理一下。若有错误,请广大朋友们指正。
使用微信小程序组件radio-group、picker,用wxss对radio按照需求进行重构,picker里边的start和end时间是根据radio来显示的。将start、end时间放在data里,radio发生改变时,改变data中的时间。当picker中的值发生改变时,如果时间范围已经超出了radio中的范围,需要对radio的显示进行实时修改。
话不多说,接下来上代码。
index.wxml
<view class="con_screen"> <text class="cons_ti">日期范围</text> <!-- 单选时间 --> <radio-group class="radio-group" bindchange="radioCheckedChange"> <block > <label class="cons_radio {{radioCheckVal==1?'active':''}}" > <radio value="1" hidden="true"/> <text>今日</text> </label> <label class="cons_radio {{radioCheckVal==4?'active':''}}" > <radio value="4" hidden="true" /> <text>近7日</text> </label> <label class="cons_radio {{radioCheckVal==6?'active':''}}" > <radio value="6" hidden="true"/> <text>近30日</text> </label> </block> </radio-group> <!-- 时间段 --> <view class="picker_group"> <picker mode="date" value="{{date}}" start="2015-09-01" end="{{date2}}" bindchange="bindDateChange"> <view class="picker"> {{date}} <image src="../../image/home_zsr_icon.png"></image> </view> </picker> <picker mode="date" value="{{date2}}" start="{{date}}" end="2018-01-24" bindchange="bindDateChange2"> <view class="picker"> {{date2}} <image src="../../image/home_zsr_icon.png"></image> </view> </picker> </view> </view>
index.wxss
.radio-group{ display: inline-block; } .cons_radio{ margin-left: 30rpx; } .cons_radio text{ font-size: 26rpx; color: #c8c8c8; height: 40rpx; /* 93rpx; */ border: #c8c8c8 solid 2rpx; padding:0 20rpx; text-align: center; line-height: 40rpx; display: inline-block; border-radius: 20rpx; } /* 黄色 */ .cons_radio.active text{ color: #F5A623; border-color: #F5A623; } /* 红色 */ .cons_radio.activered text{ color: #FA2B21; border-color: #FA2B21; } /* 蓝色 */ .cons_radio.activeblue text{ color: #4AAFDD; border-color: #4AAFDD; } /* 黄绿色 */ .cons_radio.activeyg text{ color: #BABC1A; border-color: #BABC1A; } /* 日期选择 */ .picker_group{ display: block; font-size: 28rpx; color: #c8c8c8; margin-left: 20rpx; margin-top: 15rpx; } .picker_group picker{ display: inline-block; margin:0 20rpx 0 20rpx; position: relative; color: #232323; } .picker_group picker image{ width: 20rpx; height: 20rpx; } .cons_zsr{ display: block; font-size: 32rpx; color: #232323; margin-left: 40rpx; margin-bottom: 15rpx; } .cons_zsr picker image{ width: 30rpx; height: 30rpx; }
index.js
Page({ data:{ page:'', Loading:false, isLogin:false, radioCheckVal:0,//收益占比单选 date: '2015-09-01',//收益占比时间段起始时间 date2:'2018-01-24',//收益占比时间段终止时间 }, // 收益占比单选时间 ring radioCheckedChange(e){ let that=this; that.setData({ radioCheckVal:e.detail.value }) console.log(that.data.radioCheckVal) if(that.data.radioCheckVal=='1'){ that.setData({ date:timedate.formatDate(now), date2:timedate.formatDate(now), }) // console.log(that.data.date+'------'+that.data.date2) that.timeFn(that.data.arrayindex,that.data.date,that.data.date2) } if(that.data.radioCheckVal=='4'){ that.setData({ date:timedate.sevenDays().t2, date2:timedate.sevenDays().t1, }) // console.log(that.data.date+'------'+that.data.date2) that.timeFn(that.data.arrayindex,that.data.date,that.data.date2) } if(that.data.radioCheckVal=='6'){ that.setData({ date:timedate.thirtyDays().t2, date2:timedate.thirtyDays().t1, }) // console.log(that.data.date+'------'+that.data.date2) that.timeFn(that.data.arrayindex,that.data.date,that.data.date2) } }, // 收益占比时间段选择 bindDateChange(e){ let that=this; console.log(e.detail.value) that.setData({ date: e.detail.value, radioCheckVal:0, }) that.timeFn(that.data.arrayindex,that.data.date,that.data.date2) }, bindDateChange2(e){ let that=this; that.setData({ date2: e.detail.value, radioCheckVal:0, }) that.timeFn2(that.data.arrayindex,that.data.date,that.data.date2) },