1. 前言
微信小程序已经成为了移动端开发的一大趋势,相较于传统的APP开发,小程序开发可谓是简单快捷,而且能够更好地融入到微信社交平台中。在实际开发中,五星评分效果是经常被使用到的,本文就来介绍一下如何实现微信小程序中的五星评分效果。
2. 实现思路
实现五星评分效果的主要思路是,通过对五颗星进行绑定事件,当用户点击星星时,根据不同的情况展示不同的分值和图片。具体实现过程包括以下几个步骤:
2.1 星星的初始化和绑定事件
我们需要将五颗星绑定到页面中,并通过wx:for循环来遍历五颗星。在页面加载时,我们需要对五颗星的初始状态进行设置,如下所示:
<view class="star-wrap">
<view wx:for="{{5}}" class="iconfont iconstarto star" data-index="{{index}}" bindtap="changeStar"></view>
</view>
在上述代码中,我们通过wx:for遍历了5颗星,并指定了它们所属的class,以及绑定数据下标data-index和点击事件bindtap(后面将会讲到)。
在实际开发中,我们自定义了CSS样式`star-wrap`和`.iconstarto`用于渲染星星的样式,具体可参见下面CSS代码:
.star-wrap{
display: flex;
justify-content: center;
margin-top: 50rpx;
}
.star{
font-size: 50rpx;
margin-right: 20rpx;
color: #ccc;
}
2.2 事件的处理
接下来,我们需要对星星的点击事件进行处理,当用户点击星星时,根据不同情况,展示不同的分值和颜色。具体的逻辑如下:
changeStar(e) {
let index = e.currentTarget.dataset.index;
let score;
// 代表第一次点击,该变量记录用户第一次点击的下标
if (this.tapTop === -1) {
// 根据不同下标,展示不同分值和不同颜色的星星
switch (index){
case 0:
score = 1;
this.tapTop = 0;
break;
case 1:
score = 2;
this.tapTop = 1;
break;
case 2:
score = 3;
this.tapTop = 2;
break;
case 3:
score = 4;
this.tapTop = 3;
break;
case 4:
score = 5;
this.tapTop = 4;
break;
}
} else {
// 代表已经点击过,判断当前点击是否在上次之前,以及是否连续点击
if (index <= this.tapTop) {
score = index+1;
this.tapTop = index;
} else {
// 如果当前点击和上次点击不是连续的,重置之前的状态,开始新的点击
score = index+1;
this.tapTop = index;
for (let i=0; i
this.setData({
['stars['+i+'].icon']: 'iconxinglight'
});
}
}
}
// 根据分值设置星星的颜色
for (let i=0; i
this.setData({
['stars['+i+'].icon']: 'iconxing'
});
}
this.setData({
score: score
});
}
在上述代码中,我们定义了一个名为changeStar的事件处理函数,在函数内部根据data-index获取到当前点击的星星下标,并通过switch语句设置分值以及每颗星星的颜色。随后,在调整每颗星星颜色的同时,记录用户的分值,并将新的分值传递给参数score,最后通过this.setData重新绑定数据并渲染。
实际上,除了事件处理函数外,我们还需要定义数据对象,包括stars数组用于初始化星星状态、score变量用于记录分值、tapTop用于记录上次点击的下标。完整的数据定义如下:
data: {
stars: [{
icon: 'iconxinglight'
},{
icon: 'iconxinglight'
},{
icon: 'iconxinglight'
},{
icon: 'iconxinglight'
},{
icon: 'iconxinglight'
}],
score: '未评分',
tapTop: -1
}
3. 总结
基于上面的思路和代码实现,我们可以很简单地在微信小程序中实现五星评分效果。当然,实现的过程可能还有许多需要优化和改进的地方,希望读者在实际开发中能够深入思考,不断改进自己的开发技能。