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 相关文章推荐
刷新页面实现方式总结(HTML,ASP,JS)
Nov 13 Javascript
jquery $.ajax()取xml数据的小问题解决方法
Nov 20 Javascript
dojo学习第一天 Tab选项卡 实现
Aug 28 Javascript
JavaScript实现按Ctrl键打开新页面
Sep 04 Javascript
Bootstrap实现响应式导航栏效果
Dec 28 Javascript
使用DeviceOne实现微信小程序功能
Dec 29 Javascript
用jQuery实现优酷首页轮播图
Jan 09 Javascript
JavaScript两个变量交换值的实现方法
Mar 01 Javascript
AngularJS 异步解决实现方法
Jun 12 Javascript
Javascript中的getter和setter初识
Aug 17 Javascript
vue项目中全局引入1个.scss文件的问题解决
Aug 01 Javascript
antd-DatePicker组件获取时间值,及相关设置方式
Oct 27 Javascript
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
几个php应用技巧
2008/03/27 PHP
PHP set_time_limit(0)长连接的实现分析
2010/03/02 PHP
PHP编码规范之注释和文件结构说明
2010/07/09 PHP
PHP 将逗号、空格、回车分隔的字符串转换为数组的函数
2012/06/07 PHP
PHP操作文件的一些基本函数使用示例
2014/11/18 PHP
php可应用于面包屑导航的迭代寻找家谱树实现方法
2015/02/02 PHP
PHP获取Exif缩略图的方法
2015/07/13 PHP
php显示页码分页类的封装
2017/06/08 PHP
laravel 模型查询按照whereIn排序的示例
2019/10/16 PHP
PHP设计模式之数据访问对象模式(DAO)原理与用法实例分析
2019/12/12 PHP
基于JavaScript实现根据手机定位获取当前具体位置(X省X市X县X街道X号)
2015/12/29 Javascript
JavaScript记录光标在编辑器中位置的实现方法
2016/04/22 Javascript
改变checkbox默认选中状态及取值的实现代码
2016/05/26 Javascript
深入学习js瀑布流布局
2016/10/14 Javascript
基于JS设计12306登录页面
2016/12/28 Javascript
AngularJS表单提交实例详解
2017/02/18 Javascript
ES6正则表达式的一些新功能总结
2017/05/09 Javascript
JavaScript原型继承_动力节点Java学院整理
2017/06/30 Javascript
javaScript中&quot;==&quot;和&quot;===&quot;的区别详解
2018/03/16 Javascript
JS实现访问DOM对象指定节点的方法示例
2018/04/04 Javascript
Vue波纹按钮组件制作
2018/04/30 Javascript
详解npm 配置项registry修改为淘宝镜像
2018/09/07 Javascript
JS常见错误(Error)及处理方案详解
2020/07/02 Javascript
谈一谈vue请求数据放在created好还是mounted里好
2020/07/27 Javascript
JavaScript实现前端倒计时效果
2021/02/09 Javascript
python实现定时同步本机与北京时间的方法
2015/03/24 Python
在Docker上开始部署Python应用的教程
2015/04/17 Python
Python 装饰器深入理解
2017/03/16 Python
Python GUI Tkinter简单实现个性签名设计
2018/06/19 Python
C++面试题目
2013/06/25 面试题
质量承诺书范文
2014/03/27 职场文书
物流管理专业求职信
2014/05/29 职场文书
大学生求职信例文
2014/06/29 职场文书
个人事迹材料范文
2014/12/29 职场文书
2015财务年度工作总结范文
2015/05/04 职场文书
《鲸》教学反思
2016/02/23 职场文书