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 缩图函数 (onDOMLoaded)……
Oct 23 Javascript
在iframe里的页面编写js,实现在父窗口上创建动画效果展开和收缩的div(不变动iframe父窗口代码)
Dec 20 Javascript
jquery自定义类似$.ajax()的方法实现代码
Aug 13 Javascript
JavaScript获取伪元素(Pseudo-Element)属性的方法技巧
Mar 13 Javascript
简单介绍JavaScript中字符串创建的基本方法
Jul 07 Javascript
JS中作用域和变量提升(hoisting)的深入理解
Oct 31 Javascript
javascript设置文本框光标的方法实例小结
Nov 04 Javascript
js简易版购物车功能
Jun 17 Javascript
前后端如何实现登录token拦截校验详解
Sep 03 Javascript
微信小程序开发实现的选项卡(窗口顶部/底部TabBar)页面切换功能图文详解
May 14 Javascript
JS控制下拉列表左右选择实例代码
May 08 Javascript
node.js通过Sequelize 连接MySQL的方法
Dec 28 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缩小png图片不损失透明色的解决方法
2013/12/25 PHP
PHP中遇到BOM、编码导致json_decode函数无法解析问题
2014/07/02 PHP
PHP面向对象程序设计OOP继承用法入门示例
2016/12/27 PHP
PHP设计模式之装饰器模式实例详解
2018/02/07 PHP
关于javascript DOM事件模型的两件事
2010/07/22 Javascript
js 处理URL实用技巧
2010/11/23 Javascript
jquery实现带二级菜单的导航示例
2014/04/28 Javascript
手机号码,密码正则验证
2014/09/04 Javascript
js解决select下拉选不中问题
2014/10/14 Javascript
js实现鼠标划过给div加透明度的方法
2015/05/25 Javascript
JS实现仿Windows经典风格的选项卡Tab切换代码
2015/10/20 Javascript
jQuery实现Tab选项卡切换效果简单演示
2015/11/23 Javascript
nodejs接入阿里大鱼短信验证码的方法
2017/07/10 NodeJs
使用Node.js搭建静态资源服务详细教程
2017/08/02 Javascript
详解vue指令与$nextTick 操作DOM的不同之处
2018/08/02 Javascript
vue实现数字动态翻牌的效果(开箱即用)
2019/12/08 Javascript
Python版实现微信公众号扫码登陆
2020/05/28 Javascript
vue中选中多个选项并且改变选中的样式的实例代码
2020/09/16 Javascript
[01:01:42]Secret vs Optic Supermajor 胜者组 BO3 第二场 6.4
2018/06/05 DOTA
Python数据可视化正态分布简单分析及实现代码
2017/12/04 Python
用pycharm开发django项目示例代码
2018/10/24 Python
Python实现对特定列表进行从小到大排序操作示例
2019/02/11 Python
python实现QQ批量登录功能
2019/06/19 Python
如何利用Pyecharts可视化微信好友
2019/07/04 Python
python中p-value的实现方式
2019/12/16 Python
利用CSS3实现文本框的清除按钮相关的一些效果
2015/06/23 HTML / CSS
HTML5 创建canvas元素示例代码
2014/06/04 HTML / CSS
Monnier Freres中文官网:法国领先的奢侈品配饰在线零售商
2017/11/01 全球购物
电气工程师岗位职责
2014/01/01 职场文书
求职简历的自我评价
2014/01/31 职场文书
假面舞会策划方案
2014/05/29 职场文书
行政部经理助理岗位职责
2014/06/15 职场文书
信用卡逾期证明示例
2014/09/13 职场文书
工程款催款函
2015/06/24 职场文书
七年级作文之《我和我的祖国》观后感作文
2019/10/18 职场文书
MySQL主从切换的超详细步骤
2022/06/28 MySQL