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. Docs-.NET-C#-指南-语言参考-预处理器指令:#elif(C# 参考)

    ylbtech-Docs-.NET-C#-指南-语言参考-预处理器指令:#elif(C# 参考) 1.返回顶部 1. #elif(C# 参考) 2015/07/20 #elif 可以创建复合条件指令. ...

  2. 【转】地球坐标系 (WGS-84) 到火星坐标系 (GCJ-02) 的转换算法 C#

    // // Copyright (C) 1000 - 9999 Somebody Anonymous // NO WARRANTY OR GUARANTEE // using System; name ...

  3. python安装pip方法

    1.先下载pip安装脚本: https://bootstrap.pypa.io/get-pip.py 2.执行python get-pip.py 3.安装完成.

  4. mycat 实现读写分离

    mycat 实现读写分离 配置mysql实现主从复制 安装jdk 安装mycat实现读写分离 tar zxf Mycat-server-1.6-RELEASE-20161028204710-sangn ...

  5. Linux下通过shell进MySQL执行SQL或导入脚本

    这条命令表示通过用户名和密码执行shell然后在shell里面执行一个建表语句: USER="root" PASS="root" mysql -u $USER ...

  6. iOS-UINavigationController多控制器管理

    UINavigationController 7.8.1 添加子控制器进栈 UINavigationController *nav = [[UINavigationController alloc]  ...

  7. 给.Net Core添加Swagger实现接口文档自动生成

    1.添加Nuget相关引用 Swashbuckle.AspNetCore

  8. 详解Nginx中HTTP的keepalive相关配置

    http keepalive在http早期 ,每个http请求都要求打开一个tpc socket连接,并且使用一次之后就断开这个tcp连接.使用keep-alive可以改善这种状态,即在一次TCP连接 ...

  9. Arduino图形化编程软件ArduBlock的安装过程

    ArduBlock是一款图形编程插件,接下来我们在Windows10上进行安装 注意ArduBlock虽然能安装在1.83版本的Ardunio上,但在载入程序时会报错,用本身的IDE不会出现这种情况. ...

  10. selenium + python 环境配置 (三)之启动chrome

    安装启动chromedriver的方法和ie类似 2.启动chrome 即selenium调用ChromeDriver打开Chrome浏览器 ①下载并解压,你会得到一个chromedriver.exe ...