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 闭包疑问
Dec 30 Javascript
js和jquery如何获取图片真实的宽度和高度
Sep 28 Javascript
javascript常用函数归纳整理
Oct 31 Javascript
Angularjs 基础入门
Dec 26 Javascript
js获取图片宽高的方法
Nov 25 Javascript
基于BootStrap与jQuery.validate实现表单提交校验功能
Dec 22 Javascript
BootStrap 模态框实现刷新网页并关闭功能
Jan 04 Javascript
javascript常用的设计模式
Feb 09 Javascript
Vue2.0利用vue-resource上传文件到七牛的实例代码
Jul 28 Javascript
微信小程序云开发之使用云函数
May 17 Javascript
JavaScript indexOf()原理及使用方法详解
Jul 09 Javascript
jQuery带控制按钮轮播图插件
Jul 31 jQuery
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遍历目录与文件夹的多种方法详解
2013/11/14 PHP
PHP批量上传图片的具体实现方法介绍.
2014/02/26 PHP
WordPress中对访客评论功能的一些优化方法
2015/11/24 PHP
开启PHP的伪静态模式
2015/12/31 PHP
PHP count_chars()函数讲解
2019/02/14 PHP
apache集成php7.3.5的详细步骤
2019/06/20 PHP
[原创]PHP global全局变量经典应用与注意事项分析【附$GLOBALS用法对比】
2019/07/12 PHP
JS TextArea字符串长度限制代码集合
2012/10/31 Javascript
javascript 三种方法实现获得和设置以及移除元素属性
2013/03/20 Javascript
Web Inspector:关于在 Sublime Text 中调试Js的介绍
2013/04/18 Javascript
利用js 进行输入框自动匹配字符的小例子
2013/06/29 Javascript
按下Enter焦点移至下一个控件的实现js代码
2013/12/11 Javascript
JavaScript中创建字典对象(dictionary)实例
2015/03/31 Javascript
JS实现的3D拖拽翻页效果代码
2015/10/31 Javascript
nodejs利用ajax实现网页无刷新上传图片实例代码
2017/06/06 NodeJs
JavaScript对象的浅拷贝与深拷贝实例分析
2018/07/25 Javascript
VUE实现图片验证码功能
2020/11/18 Javascript
小程序开发之模态框组件封装
2020/04/23 Javascript
[04:13]2018国际邀请赛典藏宝瓶Ⅱ饰品一览
2018/07/21 DOTA
Windows和Linux下使用Python访问SqlServer的方法介绍
2015/03/10 Python
Python下Fabric的简单部署方法
2015/07/14 Python
在Django框架中编写Contact表单的教程
2015/07/17 Python
python通过opencv实现批量剪切图片
2017/11/13 Python
Python补齐字符串长度的实例
2018/11/15 Python
Python二叉搜索树与双向链表转换算法示例
2019/03/02 Python
python:按行读入,排序然后输出的方法
2019/07/20 Python
解决python Jupyter不能导入外部包问题
2020/04/15 Python
Python测试框架:pytest学习笔记
2020/10/20 Python
python 使用三引号时容易犯的小错误
2020/10/21 Python
CSS3实现swap交换动画
2016/01/19 HTML / CSS
在canvas上实现元素图片镜像翻转动画效果的方法
2018/03/20 HTML / CSS
在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern "C"
2014/08/09 面试题
毕业生求职简历的自我评价
2013/10/23 职场文书
责任书格式范文
2014/07/28 职场文书
HTML+css盒子模型案例(圆,半圆等)“border-radius” 简单易上手
2021/05/10 HTML / CSS
Python多线程实用方法以及共享变量资源竞争问题
2022/04/12 Python