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 相关文章推荐
网页自动刷新,不产生嗒嗒声的一个解决方法
Mar 27 Javascript
详解JavaScript函数绑定
Aug 18 Javascript
jQuery each函数源码分析
May 25 Javascript
JS基于正则表达式的替换操作(replace)用法示例
Apr 28 Javascript
Javascript中的async awai的用法
May 17 Javascript
详解Vue整合axios的实例代码
Jun 21 Javascript
checkbox在vue中的用法小结
Nov 13 Javascript
微信小程序button标签open-type属性原理解析
Jan 21 Javascript
如何基于javascript实现贪吃蛇游戏
Feb 09 Javascript
使用Vue-scroller页面input框不能触发滑动的问题及解决方法
Aug 08 Javascript
多个Vue项目部署到服务器的步骤记录
Oct 22 Javascript
解决vue scoped html样式无效的问题
Oct 24 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 多维数组排序实现代码
2009/08/05 PHP
php设计模式 Template (模板模式)
2011/06/26 PHP
浅谈ThinkPHP的URL重写
2014/11/25 PHP
PHP中empty和isset对于参数结构的判断及empty()和isset()的区别
2015/11/15 PHP
再谈Yii Framework框架中的事件event原理与应用
2020/04/07 PHP
JavaScript获取GridView选择的行内容
2009/04/14 Javascript
javascript操作cookie_获取与修改代码
2009/05/21 Javascript
一段实现页面上的图片延时加载的js代码
2010/02/11 Javascript
JSON 学习之JSON in JavaScript详细使用说明
2010/02/23 Javascript
javascript使用正则表达式检测IP地址
2014/12/03 Javascript
jQuery Mobile漏洞会有跨站脚本攻击风险
2017/02/12 Javascript
详解Vue学习笔记进阶篇之列表过渡及其他
2017/07/17 Javascript
JavaScript中如何判断一个值的类型
2017/09/15 Javascript
js实现的在本地预览图片功能示例
2019/11/09 Javascript
[02:28]DOTA2亚洲邀请赛附加赛 RECAP赛事回顾
2015/01/29 DOTA
python的几种开发工具介绍
2007/03/07 Python
Python标准库内置函数complex介绍
2014/11/25 Python
Python CSV模块使用实例
2015/04/09 Python
python hmac模块验证客户端的合法性
2020/11/07 Python
Python xlwings插入Excel图片的实现方法
2021/02/26 Python
一款纯css3实现的漂亮的404页面的实例教程
2014/11/27 HTML / CSS
css3动画 小球滚动 js控制动画暂停
2019/11/29 HTML / CSS
html table呈现个人简历以及单元格宽度失效的问题解决
2021/01/22 HTML / CSS
英国领先的在线高尔夫商店:Scottsdale Golf
2019/08/26 全球购物
英国在线药房和在线药剂师:Chemist 4 U
2020/01/05 全球购物
华为慧通面试题
2012/09/11 面试题
什么叫应用程序域?什么是托管代码?什么是强类型系统?什么是装箱和拆箱?什么是重载?CTS、CLS和CLR分别作何解释?
2012/05/23 面试题
《商鞅南门立木》教学反思
2014/02/16 职场文书
学生评语大全
2014/04/18 职场文书
诚信贷款承诺书
2014/05/30 职场文书
会议接待欢迎词范文
2015/01/26 职场文书
会议新闻稿
2015/07/17 职场文书
青年联谊会致辞
2015/07/31 职场文书
中学总务处工作总结
2015/08/12 职场文书
Python 详解通过Scrapy框架实现爬取CSDN全站热榜标题热词流程
2021/11/11 Python
Golang使用Panic与Recover进行错误捕获
2022/03/22 Golang