github源码地址:https://github.com/13476075014/node-vue/blob/master/mynodeproject/13.sell/sell/src/components/star/star.vue

一:实现的思路:

  通过评分的分数,来算出高亮的全星有几颗,有没有半星,灰色星星有几颗,通过背景图片实现,例如:

    评分 : 4.6 分

    四舍五入计算把分数换算成0.5的倍数:Math.floor( 4.6 *2 ) / 2   等于 4.5

    把星星放到数组 arr_star 里面:

      是否需要半星  var half = 4.5 % 1 != 0 ?  true :false    //能被1取余整数的话就不需要半星为false,否则是true

      把全星push到数组里面   for ( var i = 0; i< Math.floor( 4.5) ;i++ ) {  arr_star.push( "on")  }  //on是星星高亮的图片名字

      把半星放到数组里面  if( half ) { arr_star.push( "half" ) }  //half是半星图片的名字

      把灰色星星放到数组里面  if( arr_star.length < 5) {

                    for( var i=0;i<(5-arr_star.length) ; i++ ){  arr_star.push( "off" ) }   //off是灰色星星的名字

二:具体实现代码:

  2.1 html部分:

    

<template>
<div class="star">
<span v-for="(item,index) in itemClasslass" class="star-item" :key="index" :class="item"></span>
</div>
</template>

  2.2 js部分

<script>
const lengths = 5;
const starOn = 'on';
const starHalf = 'half';
const starOff = 'off'; export default({
data(){
return { }
},
props:{
score:{//分数
type:Number,
default:function(){
return 5
}
}
},
created() {
},
computed:{
itemClasslass(){//星星的数组
let result = [];
let score = Math.floor(this.score * 2) / 2; //例如:把分数处理成在4.5以上及4.5就变成向上取整5,在4.5以下就变成4.5 //是否需要半星
let starhalf = score%1 != 0 ? true : false ; //几颗全星
let fullstar = Math.floor(score);
for(var i=0 ; i<fullstar;i++){//放全星
result.push(starOn);
}
if(starhalf){//放半星
result.push(starHalf)
}
if(result.length < lengths){//如果没有满到五个星就用灰色的星星补齐9
var offstar = lengths - result.length;
for(var i=0;i<offstar;i++){
result.push(starOff);
}
};
return result;
}
}
})
</script>

  2.3 css部分

<style lang="stylus" scoped>
// @import "../../common/stylus/mixin"; .star
.star-item
display inline-block
background-repeat no-repeat
width 20px
height 20px
margin-right 22px
background-size 20px 20px
&:last-child
margin-right 0
&.on
bg-image(on') /* 这个是在公用的stylus中的方法:
                bg-image($url)
                  background-image url("../../assets/images/" + $url + "@2x.png")
              */
&.half
bg-image('half')
&.off
bg-image('off') </style>

三:具体效果:

  

vue 实现的评分小星星组件,包括半星的更多相关文章

  1. 第四节:Vue表单标签和组件的基本用法,父子组件间的通信

    vue表单标签和组件的基本用法,父子组件间的通信,直接看例子吧. <!DOCTYPE html> <html> <head> <meta charset=&q ...

  2. 【分享】Vue 资源典藏(UI组件、开发框架、服务端、辅助工具、应用实例、Demo示例)

    Vue 资源典藏,包括:UI组件 开发框架 服务端 辅助工具 应用实例 Demo示例 element ★11612 - 饿了么出品的Vue2的web UI工具套件 Vux ★7503 - 基于Vue和 ...

  3. python 全栈开发,Day91(Vue实例的生命周期,组件间通信之中央事件总线bus,Vue Router,vue-cli 工具)

    昨日内容回顾 0. 组件注意事项!!! data属性必须是一个函数! 1. 注册全局组件 Vue.component('组件名',{ template: `` }) var app = new Vue ...

  4. vue - vue-cli脚手架项目中组件的使用

    在webpack-simple模板中,包括webpck模板.一个.vue文件就是一个组件. 为什么会这样呢?因为webpack干活了!webpack的将我们所有的资源文件进行打包.同时webpack还 ...

  5. Vue.js 相关知识(组件)

    1. 组件介绍 组件(component),vue.js最强大的功能之一 作用:封装可重用的代码,通常一个组件就是一个功能体,便于在多个地方都能调用该功能体 根组件:我们实例化的Vue对象就是一个组件 ...

  6. Vue简单基础 + 实例 及 组件通信

    vue的双向绑定原理:Object.defineProperty() vue实现数据双向绑定主要是:采用数据劫持结合发布者-订阅者模式的方式,通过 Object.defineProperty() 来劫 ...

  7. Vue之合理划分容器组件与展示组件

    Vue之合理划分容器组件与展示组件 时间 2019-06-02 00:30:32  Poetry's Blog 原文  http://blog.poetries.top/2019/06/01/vue- ...

  8. Vue首屏性能优化组件

    Vue首屏性能优化组件 简单实现一个Vue首屏性能优化组件,现代化浏览器提供了很多新接口,在不考虑IE兼容性的情况下,这些接口可以很大程度上减少编写代码的工作量以及做一些性能优化方面的事情,当然为了考 ...

  9. 发布自己第一个npm 组件包(基于Vue的文字跑马灯组件)

    一.前言 总结下最近工作上在移动端实现的一个跑马灯效果,最终效果如下: 印象中好像HTML标签的'marquee'的直接可以实现这个效果,不过 HTML标准中已经废弃了'marquee'标签 既然HT ...

随机推荐

  1. osg::MatrixTransform 模型基本变换

    VCNodeMatrix.h #pragma once #include <osgViewer/Viewer> #include <osgViewer/ViewerEventHand ...

  2. request cluster ID mismatch

    删除了etcd集群所有节点中的--data_dir的内容 [root@node3 ~]# cd /var/lib/etcd/ [root@node3 etcd]# ls member [root@no ...

  3. 123457123457#0#-----com.yuming.drawGame01--前拼后广--儿童画画游戏

    com.yuming.drawGame01--前拼后广--儿童画画游戏

  4. LODOP获取打印状态码和时间列表

    之前有博文介绍获取打印状态码和打印状态码的含义,相关博文:LODOP获取打印机状态码和状态码含义测试.此外 ,也有获取状态码及其变化的方法,可以获取打印状态码的列表,列表包含每个状态和每个状态的时间. ...

  5. Pyhthon3之使用__slots__

    正常情况下,我们定义了一个class,创建了一个class实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性.先定义class: >>> class Student( ...

  6. ELK之elasticsearch删除索引

    参考文档:https://www.cnblogs.com/Dev0ps/p/9493576.html elasticsearch使用时间久了会产生大量索引占用磁盘空间,可以删除索引来释放 查看当前所有 ...

  7. Hibrtnate组件映射

    Component映射 在hibernate中Component映射采用<component>标签即可 Component是某个实体的逻辑组成部分,它与实体类的主要差别在于,它没有oidC ...

  8. Oracle数据同步交换

    一.为了解决数据同步汇聚,数据分发,数据转换,数据维护等需求,TreeSoft将复杂的网状的同步链路变成了星型数据链路.     TreeSoft作为中间传输载体负责连接各种数据源,为各种异构数据库之 ...

  9. Vue Router的导航解析过程

    在我没读官方的vue router文档之前,我怎么也没想到路由的解析过程竟然有12步. 12步如下: 导航被触发. 在失活的组件里调用离开守卫beforeRouteLeave . 调用全局的 befo ...

  10. 【数据库开发】MySQL命令大全

    1.连接Mysql 格式: mysql -h主机地址 -u用户名 -p用户密码1.连接到本机上的MYSQL. 首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root ...