小程序游戏制作流程_js评分组件使用详解

摘要: js得分部件应用详细说明 本文关键为大伙儿详细介绍了js得分部件的应用方式,具备一定的参照使用价值,很感兴趣的小伙子伴们能够参照一下大家了解,很多外卖送餐app都是有得...

js评分组件使用详解       这篇文章主要为大家介绍了js评分组件的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

我们知道,许多外卖app都有评分的星星,这里我总结一下对评分组件的开发,学习视频:饿了么实战(慕课网)

<部分
 div : 
 span v-for="itemClass in itemClasses" : track-by="$index" /span 
 /div 

解释

1.在大的div里绑定starType是因为在整个App中,有多个评分组件,而它们的大小不一样,所以根据大小动态的绑定class.

同样的原理,在上一节header组件开发中也有介绍,但直到写到这里我开始渐渐明白vue.js中:class的意义。以前我想既然可以直接添加class,为什么要用绑定class来多此一举。现在我明白的,基础的样式设定,直接添加class就可以了,但是有时候涉及到根据不同的状态有不同的样式时,就要用绑定class了。

2.v-for 这里我们没有写5个span,而是遍历itemClasses,这是vue.js中的一种常用方法。既减少了代码,而且动态获取数据。

2.js部分

1. 得到评分数据

像上一节一样,我们通过pro凡科抠图来接收数据。我们要接收的是两个number类型的数据,一个是星星的尺寸,一个是分数。

pro凡科抠图: {
 size:{
 type:Number
 score:{
 type:Number

2.属性的计算

1).接收size动态绑定不同的class

starType() {
 return 'star-'+this.size;
 .star-48 {
 width: 20px;
 height: 20px;
 margin-right: 22px;
 background-size: 20px 20px;
 .star-36 {
 width: 15px;
 height: 15px;
 margin-right: 6px;
 background-size: 15px 15px;
 .star-24 {
 width: 10px;
 height: 10px;
 margin-right: 3px;
 background-size: 10px 10px;

2). 通过计算确定添加全星半星和无星

const LENGTH = 5;
const CLS_ON = 'on';
const CLS_HALF = 'half';
const CLS_OFF = 'off';
itemClasses() {
 let result = [];
 let score = Math.floor(this.score*2)/2;
 let hasDecimal = score%1 !== 0;
 let integer = Math.floor(score);
 for (var i = 0; i integer; i++) {
 result.push(CLS_ON);
 if(hasDecimal) {
 result.push(CLS_HALF);
 while (result.length LENGTH) {
 result.push(CLS_OFF);
 return result;

这段代码的思路是:创建一个数组储存星星,判断分数是否在.5以上,将分数取整,有多少分push几个on星星进去,有.5以上,push一个half,然后push进off直到长度达到5。

3).css部分
以star-48的尺寸为例

.star-48 .on {
 background-image: url('')
 .star-48 .half {
 background-image: url('')
 .star-48 .off {
 background-image: url('')

4.完整代码

 template 
 div : 
 span v-for="itemClass in itemClasses" : track-by="$index" /span 
 /div 
 /template 
 script type="text/javascript" 
 const LENGTH = 5;
 const CLS_ON = 'on';
 const CLS_HALF = 'half';
 const CLS_OFF = 'off';
 export default {
 pro凡科抠图: {
 size:{
 type:Number
 score:{
 type:Number
 computed:{
 starType() {
 return 'star-'+this.size;
 itemClasses() {
 let result = [];
 let score = Math.floor(this.score*2)/2;
 let hasDecimal = score%1 !== 0;
 let integer = Math.floor(score);
 for (var i = 0; i integer; i++) {
 result.push(CLS_ON);
 if(hasDecimal) {
 result.push(CLS_HALF);
 while (result.length LENGTH) {
 result.push(CLS_OFF);
 return result;
 /script 
 style type="text/css" 
 .star {
 font-size: 0;
 /* .star-48 {
 width: 20px;
 height: 20px;
 margin-right: 22px;
 background-size: 20px 20px;
 } */
 .star-48 : last-chlid {
 margin-right: 0;
 .star-48 .on {
 background-image: url('')
 .star-48 .half {
 background-image: url('')
 .star-48 .off {
 background-image: url('')
 .star-36 {
 width: 15px;
 height: 15px;
 margin-right: 6px;
 background-size: 15px 15px;
 .star-36 .no {
 background-image: url('')
 .star-36 .half {
 background-image: url('')
 .star-36 .off {
 background-image: url('')
 .star-24 {
 width: 10px;
 height: 10px;
 margin-right: 3px;
 background-size: 10px 10px;
 .star-24 .no {
 background-image: url('')
 .star-24 .half {
 background-image: url('')
 .star-24 .off {
 background-image: url('')
 .star-item {
 display: inline-block;
 background-repeat: no-repeat;
 width: 20px;
 height: 20px;
 margin-right: 22px;
 background-size: 20px 20px;
 /style 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持凡科。




联系我们

全国服务热线:4000-399-000 公司邮箱:343111187@qq.com

  工作日 9:00-18:00

关注我们

官网公众号

官网公众号

Copyright?2020 广州凡科互联网科技股份有限公司 版权所有 粤ICP备10235580号 客服热线 400-000-8888

技术支持:公众号小程序