1. 简介
微信小程序是一种构建于微信平台之上的小型应用程序,具有较为基础的功能,如API调用、数据存储、用户身份认证等。其中,五星评价功能是小程序中十分常见的一种功能之一,因此如何实现五星评价功能就成了一个有趣的问题。
2. 基本思路
五星评价的基本逻辑非常简单,就是让用户点击或者滑动五颗星星,根据用户的行为来确定用户的评分。在实现五星评价功能的过程中,我们可以采用以下两种实现方式:
2.1 方案一:自定义评价组件
这种方案的主要思路是通过自定义组件的方式来实现五星评价,具体措施如下:
进行组件设计
// 小程序自定义组件,实现五星评价功能
// star.js
Component({
/**
* 组件的属性列表
*/
properties: {
max: {
type: Number,
value: 5
},
score: {
type: Number,
value: 0
}
},
/**
* 组件的初始数据
*/
data: {
stars: []
},
/**
* 组件生命周期函数,在组件实例进入页面节点树时执行
*/
attached: function () {
var stars = [];
for (var i = 1; i <= this.data.max; i++) {
stars.push({
flag: i <= this.data.score
});
}
this.setData({
stars: stars
});
},
/**
* 组件的方法列表
*/
methods: {
tapStar: function (e) {
var index = e.currentTarget.dataset.index + 1;
var stars = [];
for (var i = 1; i <= this.data.max; i++) {
stars.push({
flag: i <= index
});
}
this.setData({
stars: stars
});
this.triggerEvent('ratechange', {
score: index
});
},
swipeStar: function (e) {
console.log(e.changedTouches[0]);
var index = this.getIndex(e.changedTouches[0].clientX - this.data.startLeft);
var stars = [];
for (var i = 1; i <= this.data.max; i++) {
if (i <= index) {
stars.push({
flag: true
});
} else if (i > index) {
stars.push({
flag: false
});
}
}
this.setData({
stars: stars
});
if (e.type == 'touchstart') {
this.setData({
startLeft: e.changedTouches[0].clientX
});
} else if (e.type == 'touchend') {
this.triggerEvent('ratechange', {
score: index
});
}
},
getIndex: function (x) {
return Math.ceil(x / this.data.starWidth);
}
},
/**
* 组件在页面布局完成后执行
*/
ready: function () {
var res = wx.getSystemInfoSync();
var starWidth = res.windowWidth / this.data.max;
this.setData({
starWidth: starWidth
});
}
})
在页面中使用组件
// index.js
Page({
data: {
score: 0
},
onRateChange: function (e) {
this.setData({
score: e.detail.score
});
}
})
2.2 方案二:使用已有评价组件
如果开发者不想从头开始开发五星评价组件,也可以使用一些已有的评价组件,如WeUI、iView等。如下面的代码所示:
WeUI示例
// index.wxml
<view class="weui-cells__title">评价星级:</view>
<view class="weui-cells__tips">点击或拖动星星进行评价</view>
<view class="weui-grids">
<view class="weui-grid">
<view class="weui-grid__label">自定义颜色</view>
<view class="weui-grid__content">
<icon class="weui-tabbar__icon rated-star" type="success" size="20" wx:if="{{n>=1}}" />
<icon class="weui-tabbar__icon rate-star" type="success" size="20" wx:if="{{n<1}}" />
<icon class="weui-tabbar__icon rated-star" type="success" size="20" wx:if="{{n>=2}}" />
<icon class="weui-tabbar__icon rate-star" type="success" size="20" wx:if="{{n<2}}" />
<icon class="weui-tabbar__icon rated-star" type="success" size="20" wx:if="{{n>=3}}" />
<icon class="weui-tabbar__icon rate-star" type="success" size="20" wx:if="{{n<3}}" />
<icon class="weui-tabbar__icon rated-star" type="success" size="20" wx:if="{{n>=4}}" />
<icon class="weui-tabbar__icon rate-star" type="success" size="20" wx:if="{{n<4}}" />
<icon class="weui-tabbar__icon rated-star" type="success" size="20" wx:if="{{n>=5}}" />
<icon class="weui-tabbar__icon rate-star" type="success" size="20" wx:if="{{n<5}}" />
<slider min="0" max="5" block-size="20" step="1" value="{{n}}" bindchange="slider4change" />
</view>
</view>
</view>
3. 实现效果对比
对于这两种方案而言,各有优缺点。自定义评价组件的优势在于它可以根据实际项目需求进行量身定制,比较灵活;而已有评价组件则无需从头开发,对于快速迭代开发比较适合。
4. 总结
以上就是实现五星评价功能的两种方式。通过对这两种方案的分析和比较,我们可以看出,在实际项目开发中,该如何选择评价功能的实现方案需要根据具体情况而定。无论哪种方案,都需要考虑到实现的简洁性、易用性以及用户体验,才能达到最佳效果。