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中的=等号个数问题两个跟三个有什么区别
Oct 23 Javascript
javascript中兼容主流浏览器的动态生成iframe方法
May 05 Javascript
用js提交表单解决一个页面有多个提交按钮的问题
Sep 01 Javascript
JavaScript在网页中画圆的函数arc使用方法
Nov 13 Javascript
SpringMVC框架下JQuery传递并解析Json格式的数据是如何实现的
Dec 10 Javascript
快速移动鼠标触发问题及解决方法(ECharts外部调用保存为图片操作及工作流接线mouseenter和mouseleave)
Aug 29 Javascript
Angular客户端请求Rest服务跨域问题的解决方法
Sep 19 Javascript
jQuery实现的页面详情展开收起功能示例
Jun 11 jQuery
vue打包的时候自动将px转成rem的操作方法
Jun 20 Javascript
js调用设备摄像头的方法
Jul 19 Javascript
vue.js template模板的使用(仿饿了么布局)
Aug 13 Javascript
Vue 实现创建全局组件,并且使用Vue.use() 载入方式
Aug 11 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中几种常见安全设置详解
2010/04/06 PHP
CodeIgniter实现更改view文件夹路径的方法
2014/07/04 PHP
smarty自定义函数htmlcheckboxes用法实例
2015/01/22 PHP
php实现删除空目录的方法
2015/03/16 PHP
THINKPHP支持YAML配置文件的设置方法
2015/03/17 PHP
Laravel 5.3 学习笔记之 错误&amp;日志
2016/08/28 PHP
thinkphp3.2框架中where条件查询用法总结
2019/08/13 PHP
JQUERY dialog的用法详细解析
2013/12/19 Javascript
jQuery实现响应鼠标背景变化的动态菜单效果代码
2015/08/27 Javascript
纯javascript移动优先的幻灯片效果
2015/11/02 Javascript
javascript实现网站加入收藏功能
2015/12/16 Javascript
浅析C/C++,Java,PHP,JavaScript,Json数组、对象赋值时最后一个元素后面是否可以带逗号
2016/03/22 Javascript
js验证真实姓名与身份证号,手机号的简单实例
2016/07/18 Javascript
Javascript生成带参数的二维码示例
2016/10/10 Javascript
jQuery实现弹窗居中效果类似alert()
2017/02/27 Javascript
Vue仿手机qq的实例代码(demo)
2017/09/08 Javascript
React Native时间转换格式工具类分享
2017/10/24 Javascript
浅谈Vue.js中ref ($refs)用法举例总结
2017/12/19 Javascript
vue-infinite-loading2.0 中文文档详解
2018/04/08 Javascript
vue.js中实现登录控制的方法示例
2018/04/23 Javascript
VUE实现图片验证码功能
2020/11/18 Javascript
[46:04]Liquid vs VP Supermajor决赛 BO 第四场 6.10
2018/07/05 DOTA
python+selenium+autoit实现文件上传功能
2017/08/23 Python
Python实现的特征提取操作示例
2018/12/03 Python
在python里协程使用同步锁Lock的实例
2019/02/19 Python
tensorflow之tf.record实现存浮点数数组
2020/02/17 Python
python pymysql链接数据库查询结果转为Dataframe实例
2020/06/05 Python
详解python安装matplotlib库三种失败情况
2020/07/28 Python
Python pexpect模块及shell脚本except原理解析
2020/08/03 Python
纯CSS3实现圆角效果(含IE兼容解决方法)
2014/05/07 HTML / CSS
美国户外生活方式品牌:Eddie Bauer
2016/12/28 全球购物
IFCHIC台湾:欧美国际设计师品牌
2019/05/18 全球购物
英国家居用品和床上用品零售商:P&B Home
2020/01/16 全球购物
中式面点餐厅创业计划书
2014/01/29 职场文书
《赵州桥》教学反思
2014/02/17 职场文书
钢铁是怎样炼成的读书笔记
2015/06/29 职场文书