本次只分享小程序端的代码实现,后端每个人都有自己的实现方法,就不写在此。
好了,先看实现样式:
本次投票实现需要一个页面和一个弹窗实现,我们做的是淘汰赛部分,在此,黄啊码将淘汰赛部分直接选用选择队伍投票方式,比分这块实现方式其实也类似:
那就先走第一个图吧,wxml如下:
<view class="contain item"><view wx:for="{{all_list}}" wx:key="index" wx:for-item="item" style="border-bottom: 1px solid #36a2e6;"><view class="date"><view class="game-type"><text>淘汰赛</text></view><text>2022-12-15</text><view>猜中积分<text style="color: rgb(255, 26, 26);font-weight: bold;">+500}</text></view></view><view class="guess_item"><view class="time"><text space="nbsp">12月15日 03:00半决赛</text></view><view class="country"><view class="country-item"><text space="emsp">法国 </text><image src="{{img_url+item.country_flag1}}" /></view><view class="vs">VS</view><view class="country-item diff"><image src="{{img_url+item.country_flag2}}" /><text space="emsp">摩洛哥</text></view></view><view class="btn_box"><button>参与竞猜</button></view><view class="result"><view class="pre-item"><span>我的预测</span><view><text space="ensp" style="color: #3c3c3c;">---</text></view></view><view class="line"></view><view class="pre-item"><view>未参与竞猜</view></view></view></view></view></view>
</view>
wxss如下: 【对应颜色有做调整,别顾着照抄哦】
.item {margin: 20rpx;border-bottom: 4rpx solid #36a2e6;
}
.contain .item:last-child{border-bottom: 0; overflow: hidden;
}
.item_index{margin-left: 20rpx;font-size: 32rpx;color: #36a2e6;
}
.item .guess_item {width: 100%;height: 410rpx;background-color: #fff;border-radius: 8px;position: relative;
}
.item .date {display: flex;position: relative;justify-content: space-between;height: 130rpx;line-height: 130rpx;font-size: 30rpx;color: #36a2e6; margin: 0rpx 25rpx;
}
.item .date .game-type {position: absolute;top: -1rpx;left: -26rpx;width: 110rpx;height: 42rpx;line-height: 42rpx;background-color: #36a2e6;text-align: center;border-bottom-right-radius: 22rpx;font-size:24rpx;color: #fff;
}
.item .time {height: 70rpx;line-height: 70rpx;text-align: center;color: rgb(66, 66, 66);font-size: 28rpx;margin-left: 11rpx;
}
.item .guess_item .country{display: flex;margin-top: 16rpx;
}.country-item {width: 40%;height: 48rpx;display: flex;align-items: center;justify-content: flex-end;font-size: 30rpx;
}.diff {justify-content: flex-start;
}
.item .guess_item .country .country-item image {width: 82rpx;height: 100%;
}
.item .guess_item .country .country-item text {color: rgb(46, 46, 46);
}
.item .guess_item .country .vs {width: 20%;text-align: center;height: 48rpx;line-height: 48rpx;color: rgb(255, 26, 26);font-weight: bold;font-size: 32rpx;
}
.item .guess_item .btn_box {display: flex;justify-content: center;height: 130rpx;line-height: 130rpx;align-items: center;
}
.item .guess_item .btn_box .btn {width: 220rpx;height: 58rpx;line-height: 58rpx;text-align: center;background-color: #ffc320;color: #fff;border-radius: 30rpx;font-size: 29rpx;
}
.item .guess_item .btn_box button {width: 220rpx;height: 52rpx;font-weight: unset;
}
.item .guess_item .btn_box text {color:#3c3c3c;font-size: 30rpx;
}
.item .guess_item .result {display: flex;justify-content: space-between;
}.item .guess_item .result .pre-item text {width: 50%;text-align: center;
}
.item .guess_item .result .pre-item {width: 44%;height: 110rpx;display: flex;flex-direction: column;align-items: center;
}
.item .guess_item .result .pre-item span {width: 76%;display: block;height: 52rpx;font-size: 28rpx;color:#36a2e6;text-align: center;line-height: 52rpx;border: 4rpx solid #36a2e6;border-radius: 32rpx;
}
.item .guess_item .result .pre-item view {width: 80%;height: 58rpx;text-align: center;line-height: 82rpx;font-size: 30rpx;color: rgb(255, 26, 26);
}
.line {width: 0;height: 64rpx;border-left:1rpx solid #36a2e6;border-right: 1rpx solid #36a2e6;background-color: #36a2e6;
}
.submit_box {position: fixed;top: 356rpx;left: 50%;transform: translateX(-50%);width: 92%;height: 42%;background-image:linear-gradient(to bottom,#36a2e6,#fff);opacity: 0.92;border-radius: 24rpx;box-shadow: 2rpx 2rpx 16rpx 4rpx #d4d4d4;border: 2rpx solid #36a2e6;
}.submit_box .tip {height: 150rpx;text-align: center;line-height: 150rpx;font-size: 34rpx;color: #fff;
}
.submit_box .score {display: flex;justify-content: center;align-items: center;
}
.submit_box .score input {width: 86rpx;height: 86rpx;background-color: #fff;border-radius: 8rpx;margin: 0 46rpx;font-size: 36rpx;font-weight: bold;color: rgb(0, 0, 0);text-align: center;
}
.submit_box .score view {width: 40rpx;height: 8rpx;background-color: #fff;
}.close {height: 70rpx;display: flex;justify-content: flex-end;
}.close view {width: 76rpx;height: 66rpx;line-height: 64rpx;text-align: center;
}
.icon-guanbi {color: #fff;
}.sub_btn_box {height: 180rpx;display: flex;justify-content: center;align-items: center;
}.sub_btn_box .sub_btn {width: 300rpx;height: 70rpx;line-height: 70rpx;background-color: #ffc320;text-align: center;border-radius: 14rpx;font-size: 34rpx;color: #fff;
}
.end {position: absolute;width:460rpx;height:100rpx;text-align: center;line-height: 100rpx;top: 194rpx;left: 50%;border-radius: 20rpx;transform: translateX(-50%);text-align: center;font-size: 28rpx;color: rgb(255, 26, 26);
}
接下来是弹出窗体的wxml代码和wxss代码
<view class="choose_box">
<view bindtap="chooseFn" class="left {{is_choose1?'choose_color':''}}" data-id="1">猜TA胜</view>
<view bindtap="chooseFn" class="{{is_choose2?'choose_color':''}}" data-id="2">平局</view>
<view bindtap="chooseFn" class="right {{is_choose3?'choose_color':''}}" data-id="3" >猜TA胜</view>
</view>
.choose_box {
display: flex;
justify-content: center;
}
.choose_box view {
width: 178rpx;
height: 74rpx;
line-height: 74rpx;
background-color: #fff;
margin: 0 1rpx;
text-align: center;
border:2rpx solid #36a2e6;
color: #36a2e6;
}
.choose_box .choose_color {
background-color: #36a2e6;
color: #fff;
}
.choose_box .left{
border-top-left-radius: 22rpx;
border-bottom-left-radius: 22rpx;
}
.choose_box .right{
border-top-right-radius: 22rpx;
border-bottom-right-radius: 22rpx;
}
最后实现的时候别忘了把点击事件加上
这里的dataset.id表示的是你选中的国家id,我在上边代码就直接省略了,毕竟每个认对于变量的命名都有所不同。
chooseFn(e) {if(e.currentTarget.dataset.id=="1") {this.setData({is_choose1:true,is_choose2:false,is_choose3:false,})}else if(e.currentTarget.dataset.id=="2") {this.setData({ is_choose1:false,is_choose2:true,is_choose3:false,})}else if(e.currentTarget.dataset.id=="3") {this.setData({ is_choose1:false,is_choose2:false,is_choose3:true,})}},
至于如何弹窗和关闭事件这个部分,我相信大多数只要入门过小程序的都知道,我就不一一阐述了,如果再不懂直接扣我也行。
好了,今天的分享就这里,有问题的留个言,别忘了一键三连,下次我们还会再见!
我是黄啊码,码字的码,退。。。退。。。退。。。朝!