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 相关文章推荐
jquery 图片预加载 自动等比例缩放插件
Dec 25 Javascript
Javascript和HTML5利用canvas构建Web五子棋游戏实现算法
Jul 17 Javascript
js实现图片和链接文字同步切换特效的方法
Feb 20 Javascript
js简单实现竖向tab选项卡的方法
May 04 Javascript
JavaScript事件类型中UI事件详解
Jan 14 Javascript
jquery拖动层效果插件用法实例分析(附demo源码)
Apr 28 Javascript
详解使用webpack打包编写一个vue-toast插件
Nov 08 Javascript
微信小程序登录换取token的教程
May 31 Javascript
详解webpack打包时排除其中一个css、js文件或单独打包一个css、js文件(两种方法)
Oct 26 Javascript
微信小程序中的店铺评分组件及vue中用svg实现的评分显示组件
Nov 16 Javascript
Vue详细的入门笔记
May 10 Vue.js
小程序实现侧滑删除功能
Jun 25 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
杏林同学录(六)
2006/10/09 PHP
php heredoc和phpwind的模板技术使用方法小结
2008/03/28 PHP
PHP中用header图片地址 简单隐藏图片源地址
2008/04/09 PHP
PHP5中新增stdClass 内部保留类
2011/06/13 PHP
php实现的漂亮分页方法
2014/04/17 PHP
分享一则PHP定义函数代码
2015/02/26 PHP
javascript 火狐(firefox)不显示本地图片问题解决
2008/07/05 Javascript
ExtJS 2.0实用简明教程 之Border区域布局
2009/04/29 Javascript
js 屏蔽鼠标右键脚本附破解方法
2009/12/03 Javascript
理解Javascript_02_理解undefined和null
2010/10/11 Javascript
浏览器兼容console对象的简要解决方案分享
2013/10/24 Javascript
JS创建自定义表格具体实现
2014/02/11 Javascript
关于JS中prototype的理解
2015/09/07 Javascript
jQuery Validate验证框架经典大全
2015/09/23 Javascript
javascript类型系统 Window对象学习笔记
2016/01/07 Javascript
vue-router路由与页面间导航实例解析
2017/11/07 Javascript
jQuery中库的引用方法
2018/01/06 jQuery
AngularJS监听ng-repeat渲染完成的两种方法
2018/01/16 Javascript
通过实例了解Nodejs模块系统及require机制
2020/07/16 NodeJs
Python实现的几个常用排序算法实例
2014/06/16 Python
Python logging模块用法示例
2018/08/28 Python
python实现字符串和字典的转换
2018/09/29 Python
pyqt5 使用label控件实时显示时间的实例
2019/06/14 Python
Python3 itchat实现微信定时发送群消息的实例代码
2019/07/12 Python
pandas如何处理缺失值
2019/07/31 Python
蔻驰英国官网:COACH英国
2020/07/19 全球购物
医学专业毕业生推荐信
2013/11/14 职场文书
新闻系毕业生推荐信
2013/11/16 职场文书
大学生收银员求职信分享
2014/01/02 职场文书
领导班子党的群众路线对照检查材料
2014/09/25 职场文书
2015年汽车销售工作总结
2015/04/07 职场文书
2015年终个人政治思想工作总结
2015/11/24 职场文书
六一儿童节致辞稿(3篇)
2019/07/11 职场文书
创业计划书之少年玩具店
2019/09/05 职场文书
MySQL之DML语言
2021/04/05 MySQL
Java 常见的限流算法详细分析并实现
2022/04/07 Java/Android