index.wxml
<input type="number" bindinput="onScoreInput" placeholder="输入成绩(0-6)" /> <button bindtap="onSubmit">提交</button> <!-- 第一种方法:输入0-6的数字,点击提交按钮来高亮展示星星 --> <star-rating id="star-rating" current-score="{{currentScore}}"></star-rating> <!-- 第二种方法:输入0-6的数字自动高亮展示星星 --> <star-rating id="star-rating" score="{{currentScore}}"></star-rating> <!-- 第三种方法 --> <!-- <input type="number" bindinput="onScoreChange" placeholder="输入成绩(0-6)" /> <star-rating score="{{currentScore}}"></star-rating> index.js设置: Page({ data: { currentScore: 0 }, onScoreChange: function(newScore) { this.setData({ currentScore: newScore }); } }); -->
index.json
{ "usingComponents": { "star-rating":"/components/star13/index" } }
index.js
// const StarRating = require('../../../components/star13/index'); Page({ data: { currentScore: 0 }, onScoreInput: function (e) { const score = parseInt(e.detail.value); this.setData({ currentScore: score }); }, onSubmit: function () { this.selectComponent('#star-rating').updateStars(this.data.currentScore); } });
新建组件文件:
/components/star13/index.wxml
<view class="star-rating"> <block wx:for="{{stars}}" wx:key="index"> <image src="{{item.type === 'filled' ? '/images/stars_select.png' : '/images/stars_unselect.png'}}" mode="aspectFit" class="star"></image> </block> </view>
/components/star13/index.js
Component({ properties: { score: { type: Number, value: 0, observer: function(newVal) { this.updateStars(newVal); } } }, data: { totalStars: 6, stars: [] }, attached: function() { const initialStars = Array.from({ length: this.data.totalStars }, () => ({ type: 'gray' })); this.setData({ stars: initialStars }); }, methods: { updateStars: function(newScore) { if (newScore < 0 || newScore > this.data.totalStars) { console.error('成绩超出范围'); return; } const updatedStars = this.data.stars.map((star, index) => ({ type: index < newScore ? 'filled' : 'gray' })); this.setData({ stars: updatedStars }); } } });
/components/star13/index.wxss
.star-rating{ display:inline; } .star-rating image{ width:40px; height:40px; display:inline-block; }