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 相关文章推荐
把JS与CSS写在同一个文件里的书写方法
Jun 02 Javascript
使用jquery给input和textarea设定ie中的focus
May 29 Javascript
fckeditor粘贴Word时弹出窗口取消的方法
Oct 30 Javascript
如何让你的Lightbox支持滚轮缩放及Base64图片
Dec 04 Javascript
常见JS验证脚本汇总
Dec 01 Javascript
jquery 重写 ajax提交并判断权限后 使用load方法报错解决方法
Jan 19 Javascript
JavaScript 经典实例日常收集整理(常用经典)
Mar 30 Javascript
针对JavaScript中this指向的简单理解
Aug 26 Javascript
利用Node.JS实现邮件发送功能
Oct 21 Javascript
JavaScript 监控微信浏览器且自带返回按钮时间
Nov 27 Javascript
JS利用正则表达式实现简单的密码强弱判断实例
Jun 16 Javascript
JS插入排序简单理解与实现方法分析
Nov 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
浅析php插件 HTMLPurifier HTML解析器
2013/07/01 PHP
ThinkPHP模板判断输出Empty标签用法详解
2014/06/30 PHP
jquery怎样实现ajax联动框(一)
2013/03/08 Javascript
有关于JS辅助函数inherit()的问题
2013/04/07 Javascript
JS操作图片(增,删,改) 例子
2013/04/17 Javascript
快速查找数组中的某个元素并返回下标示例
2013/09/03 Javascript
使用JavaScript开发IE浏览器本地插件实例
2015/02/18 Javascript
JavaScript设置、获取、清除单值和多值cookie的方法
2015/11/17 Javascript
js实现索引图片切换效果
2015/11/21 Javascript
基于javascript实现最简单的选项卡切换效果
2016/05/16 Javascript
js弹出框、对话框、提示框、弹窗实现方法总结(推荐)
2016/05/31 Javascript
Bootstrap 布局组件(全)
2016/07/18 Javascript
jQuery插件Validation快速完成表单验证的方式
2016/07/28 Javascript
微信小程序 request接口的封装实例代码
2017/04/26 Javascript
jQuery动态追加页面数据以及事件委托详解
2017/05/06 jQuery
JavaScript实现带有子菜单和控件的slider轮播图效果
2017/11/01 Javascript
微信小程序版本自动更新的方法
2019/06/14 Javascript
javascript 设计模式之享元模式原理与应用详解
2020/04/08 Javascript
vue项目配置 webpack-obfuscator 进行代码加密混淆的实现
2021/02/26 Vue.js
Python中的闭包详细介绍和实例
2014/11/21 Python
Python实现字典去除重复的方法示例
2017/07/31 Python
python MysqlDb模块安装及其使用详解
2018/02/23 Python
使用Python快速搭建HTTP服务和文件共享服务的实例讲解
2018/06/04 Python
python wav模块获取采样率 采样点声道量化位数(实例代码)
2020/01/22 Python
你可能不知道的Python 技巧小结
2020/01/29 Python
Django配置Bootstrap, js实现过程详解
2020/10/13 Python
python邮件中附加文字、html、图片、附件实现方法
2021/01/04 Python
英国100%防污和防水的靴子:Muck Boot Company
2020/09/08 全球购物
牵手50新加坡:专为黄金岁月的单身人士而设的交友网站
2020/08/16 全球购物
大学生毕业自我评价范文分享
2013/11/07 职场文书
师德师风自查总结
2014/10/14 职场文书
护士年终考核评语
2014/12/31 职场文书
入伍通知书
2015/04/23 职场文书
思想品德课教学反思
2016/02/24 职场文书
图文详解Nginx版本平滑升级方案
2021/09/15 Servers
SQL Server中搜索特定的对象
2022/05/25 SQL Server