Vue实现星级评价效果实例详解


Posted in Javascript onDecember 30, 2019

我们把星级评价单独做成一个Star组件,抽离出来,其中父组件中引入(传入的是评分的值)

<div class="score">
  <Star :score="poiInfo.wm_poi_score"></Star>
</div>

初始Star.vue

<template>
 <div>
   <div class="star">
     <span class="star-item"></span>
   </div>
   <span>{{ score }}</span>
 </div>
</template>
<script>
export default {
  name: 'Star',
  props: {
    score: Number
  }
}
</script>

首先我们把要做星级图片用类名为star-item的span标签循环出来,星级图片有三张,全星,半星,空星

Vue实现星级评价效果实例详解

Vue实现星级评价效果实例详解

Vue实现星级评价效果实例详解

下面只罗列关键的css部分, 通过增加类区分图片

.star-item.on {
  background-image: url(./img/star24_on@2x.png);
}
.star-item.half {
  background-image: url(./img/star24_half@2x.png);
}
.star-item.off {
  background-image: url(./img/star24_off@2x.png);
}

接下来修改Star.vue的代码

<div class="star">
 <span 
  class="star-item" 
  v-for="(itemClass, index) in itemClasses"
  :key="index"
  :class="itemClass"
 >
 </span>
</div>

itemClasses值是通过计算属性获取的,思路:

通过computed返回一个长度为5的数组(显示5颗星)

数组的值是上述css取的不同星对应的类名,再通过绑定每一个循环添加的class,从而遍历星级。

比如举例评分:

4.7分对应的数组为['on', 'on', 'on', 'on', 'half']

3.4分对应的数组为['on', 'on', 'on', 'half', 'half']

JS部分的代码:

// 星星长度 
const LENGTH = 5

// 星星的状态
const CLS_ON = 'on'
const CLS_HALF = 'half'
const CLS_OFF = 'off'

export default {
  name: 'Star',
  props: {
    score: Number
  },
  computed: {
    itemClasses () {
      let result = []

      let score = Math.floor(this.score * 2) / 2

      // 半星 (通过跟1取余判断是否为小数)
      let hasDecimal = score % 1 !== 0

      // 全星 (向下取整,获取全星部分)
      let integer = Math.floor(score)

      // 遍历全星
      for(let 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
    }
  }
}

itemClasses最终是返回了一个长度为5的数组,需要注意的是

let score = Math.floor(this.score * 2) / 2

半星的划分:只有当小数第一位大于或等于5才可以算为半星,否则是空星。该计算是为了小数部分>=0.5的计算结果带有小数,从而再后面跟1取余判断是否为半星。一开始有点蒙,多试几个数想想就懂了。

比如4.3分没有半星,4.5有半星出现

结果:

比如传入的值为4.7,则显示

 Vue实现星级评价效果实例详解

总结

以上所述是小编给大家介绍的Vue实现星级评价效果实例详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
javascript removeChild 使用注意事项
Apr 11 Javascript
从零开始学习jQuery (三) 管理jQuery包装集
Feb 23 Javascript
Jquery实现点击切换图片并隐藏显示内容(2种方法实现)
Apr 11 Javascript
深入理解JavaScript 闭包究竟是什么
Apr 12 Javascript
js正文内容高亮效果的实现方法
Jun 30 Javascript
JavaScript中Window对象的属性及事件
Dec 25 Javascript
JavaScript学习总结之JS、AJAX应用
Jan 29 Javascript
jQuery简单自定义图片轮播插件及用法示例
Nov 21 Javascript
原生js实现商品放大镜效果
Jan 12 Javascript
浅谈关于axios和session的一些事
Jul 13 Javascript
JS数组中对象去重操作示例
Jun 04 Javascript
vue中使用echarts的示例
Jan 03 Vue.js
vue 中url 链接左边的小图标更改问题
Dec 30 #Javascript
微信小程序中网络请求缓存的解决方法
Dec 29 #Javascript
vue点击按钮动态创建与删除组件功能
Dec 29 #Javascript
纯js+css实现仿移动端淘宝网站的弹出详情框功能
Dec 29 #Javascript
vue中实现点击按钮滚动到页面对应位置的方法(使用c3平滑属性实现)
Dec 29 #Javascript
vue element-ui实现input输入框金额数字添加千分位
Dec 29 #Javascript
jstree中的checkbox默认选中和隐藏示例代码
Dec 29 #Javascript
You might like
[FAQ]PHP中的一些常识:类篇
2006/10/09 PHP
php 获取全局变量的代码
2011/04/21 PHP
zf框架的校验器InArray使用示例
2014/03/13 PHP
yii实现级联下拉菜单的方法
2014/07/31 PHP
ThinkPHP安装和设置
2015/07/27 PHP
php获取数据库中数据的实现方法
2017/06/01 PHP
使用composer 安装 laravel框架的方法图文详解
2019/08/02 PHP
php统计数组不同元素的个数的实例方法
2019/09/26 PHP
jQuery Select(单选) 模拟插件 V1.3.62 改进版
2010/07/17 Javascript
js实现杯子倒水问题自动求解程序
2013/03/25 Javascript
理解JAVASCRIPT中hasOwnProperty()的作用
2013/06/05 Javascript
jquery 单引号和双引号的区别及使用注意
2013/07/31 Javascript
利用javascript实现web页面中指定区域打印
2013/10/30 Javascript
showModalDialog在谷歌浏览器下会返回Null的解决方法
2013/11/27 Javascript
一个获取第n个元素节点的js函数
2014/09/02 Javascript
Atitit.js的键盘按键事件捆绑and事件调度
2016/04/01 Javascript
浅析Javascript中bind()方法的使用与实现
2016/04/29 Javascript
Node连接mysql数据库方法介绍
2017/02/07 Javascript
基于jQuery实现的Ajax 验证用户名唯一性实例代码
2017/06/28 jQuery
React Native中的RefreshContorl下拉刷新使用
2017/10/09 Javascript
详解JavaScript执行模型
2020/11/16 Javascript
python Spyder界面无法打开的解决方法
2018/04/27 Python
Python socket实现多对多全双工通信的方法
2019/02/13 Python
keras在构建LSTM模型时对变长序列的处理操作
2020/06/29 Python
Python如何使用27行代码绘制星星图
2020/07/20 Python
python类共享变量操作
2020/09/03 Python
Tostadora意大利:定制T恤
2019/04/08 全球购物
Python使用openpyxl复制整张sheet
2021/03/24 Python
医药工作者的求职信范文
2013/09/21 职场文书
机械工程师求职自我评价
2013/09/23 职场文书
销售业务员岗位职责
2014/01/29 职场文书
大二法学专业职业生涯规划范文
2014/02/12 职场文书
党员自我评议对照检查材料
2014/09/27 职场文书
卫校毕业生自我鉴定
2014/09/28 职场文书
2015企业年终工作总结范文
2015/05/27 职场文书
elasticSearch-api的具体操作步骤讲解
2021/06/28 Java/Android