微信小程序五星评分效果的实现

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. 总结

基于上面的思路和代码实现,我们可以很简单地在微信小程序中实现五星评分效果。当然,实现的过程可能还有许多需要优化和改进的地方,希望读者在实际开发中能够深入思考,不断改进自己的开发技能。