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 隐藏/显示指定的区域附HTML元素【legend】用法
Mar 05 Javascript
prototype.js常用函数详解
Jun 18 Javascript
JS使用cookie设置样式的方法
Jun 30 Javascript
AngularJS教程之简单应用程序示例
Aug 16 Javascript
Angular中使用ui router实现系统权限控制及开发遇到问题
Sep 23 Javascript
对Angular.js Controller如何进行单元测试
Oct 25 Javascript
详解Node.js中exports和module.exports的区别
Apr 19 Javascript
JScript实现地址选择功能
Aug 15 Javascript
React复制到剪贴板的示例代码
Aug 22 Javascript
Vue中的Vux配置指南
Dec 08 Javascript
2019年度web前端面试题总结(主要为Vue面试题)
Jan 12 Javascript
使用JS实现动态时钟
Mar 12 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
WordPress中登陆后关闭登陆页面及设置用户不可见栏目
2015/12/31 PHP
php发送http请求的常用方法分析
2016/11/08 PHP
详解php用static方法的原因
2018/09/12 PHP
基于Laravel-admin 后台的自定义页面用法详解
2019/09/30 PHP
PHP常量及变量区别原理详解
2020/08/14 PHP
根据地区不同显示时间的javascript代码
2007/08/13 Javascript
Jquery 滑入滑出效果实现代码
2010/03/27 Javascript
使用Json比用string返回数据更友好,也更面向对象一些
2011/09/13 Javascript
一个js过滤空格的小函数
2014/10/10 Javascript
javascript实现3D变换的立体圆圈实例
2015/08/06 Javascript
如何动态加载外部Javascript文件
2015/12/02 Javascript
AngularJS控制器详解及示例代码
2016/08/16 Javascript
Jquery Easyui进度条组件Progress使用详解(8)
2020/03/26 Javascript
详解AngularJs HTTP响应拦截器实现登陆、权限校验
2017/04/11 Javascript
JavaScript基础之this详解
2017/06/04 Javascript
js实现1,2,3,5数字按照概率生成
2017/09/12 Javascript
关于 angularJS的一些用法
2017/11/29 Javascript
Vuex 在Vue 组件中获得Vuex 状态state的方法
2018/08/27 Javascript
ES6使用export和import实现模块化的方法
2018/09/10 Javascript
JavaScript遍历DOM元素的常见方式示例
2019/02/16 Javascript
Vue+Element实现表格编辑、删除、以及新增行的最优方法
2019/05/28 Javascript
VSCode搭建Vue项目的方法
2020/04/30 Javascript
ES6扩展运算符和rest运算符用法实例分析
2020/05/23 Javascript
vue实践---vue不依赖外部资源实现简单多语操作
2020/09/21 Javascript
vue 图片裁剪上传组件的实现
2020/11/12 Javascript
element el-table表格的二次封装实现(附表格高度自适应)
2021/01/19 Javascript
介绍Python中内置的itertools模块
2015/04/29 Python
Python学习笔记之迭代器和生成器用法实例详解
2019/08/08 Python
Python-openCV读RGB通道图实例
2020/01/17 Python
使用python的turtle函数绘制一个滑稽表情
2020/02/28 Python
美国运动鞋和运动服零售商:Footaction
2017/04/07 全球购物
法院信息化建设方案
2014/05/21 职场文书
护理目标管理责任书
2014/07/25 职场文书
高中生旷课检讨书
2014/10/08 职场文书
win11高清晰音频管理器在哪里?win11找不到高清晰音频管理器解决办法
2022/04/08 数码科技
Android基础入门之dataBinding的简单使用教程
2022/06/21 Java/Android