Vue实现Rate组件(星星评分)

摘要:
'':setScore"11:12˃13141516171819exportdefault{20name:'MyRate',21props:{22//分数,默认0,保留一位小数23score:{24type:Number,25default:026},27//是否只读,默认false,鼠标点击可以打分28disabled:{29type:Boolean,30default:false31},32//是否显示分数,默认false33showText:{34type:Boolean,35default:false36}37},38data(){39return{40curScore:'',41''42}43},44created:function(){45this.getDecimal()46},47methods:{48getClass{49if{50returni˂=this.score?

这个功能就类似于某宝在购物之后,对商品进行评价

先看一下效果

Vue实现Rate组件(星星评分)第1张

那么实现这个功能也很简单,新建一个my-rate组件,然后上代码

1 <template>
2   <div   :class="{'disabled':disabled}">
3     <span v-if="showText" class="text">{{curScore||score}}分</span>
4     <div class="star-wrap">
5       <i
6         v-for="(i, index) in 5"
7         :key="index"
8         @mouseenter="disabled ? '' : curScore=i"
9         @mouseleave="disabled ? '' : curScore=''"
10         @click="disabled ? '' : setScore(i)"
11         : 
12       >
13         <i v-if="disabled&&i==Math.floor(score)+1"   :style="''+width"></i>
14       </i>
15     </div>
16   </div>
17 </template>
18 <script>
19 export default{
20   name: 'MyRate',
21 props: {
22     //分数,默认0,保留一位小数
23 score: {
24 type: Number,
25       default: 0
26 },
27     //是否只读,默认false,鼠标点击可以打分
28 disabled: {
29 type: Boolean,
30       default: false
31 },
32     //是否显示分数,默认false
33 showText: {
34 type: Boolean,
35       default: false
36 }
37 },
38 data () {
39     return{
40       curScore: '',
41        ''
42 }
43 },
44   created: function() {
45     this.getDecimal()
46 },
47 methods: {
48 getClass (i) {
49       if (this.curScore === '') {
50         return i <= this.score ? 'icon-star' : 'icon-star-o'
51       } else{
52         return i <= this.curScore ? 'icon-star' : 'icon-star-o'
53 }
54 },
55 getDecimal () {
56       this.width = Number(this.score * 100 - Math.floor(this.score) * 100) + '%'
57 },
58 setScore (i) {
59       this.$emit('update:score', i)
60 }
61 }
62 }
63 </script>
64 <style lang="less" scoped>
65 .rate{
66 .text{
67     font-size: 18px;
68 color: #ff7f2c;
69     font-weight: bold;
70 }
71   .star-wrap{
72     line-height: 0;
73     .icon-star-o{
74 position: relative;
75 8px;
76 height: 8px;
77       line-height: 0;
78       display: inline-block;
79       margin-right: 2px;
80       background: url('../../public/gray.png') 0 0 ~'/' auto 100%;   // 这边是没有选中星星的图片
81       .icon-star{
82 position: absolute;
83         left:0;
84         top:0;
85 }
86 }
87     .icon-star{
88 8px;
89 height: 8px;
90       line-height: 0;
91       display: inline-block;
92       margin-right: 2px;
93       background: url('../../public/yellow.png') 0 0 ~'/' auto 100%;   // 这边是选中之后星星的图片
94 }
95     i:last-child{
96       margin-right: 0px;
97 }
98 }
99 }
100 </style>

注意,你的项目必须支持less,这边样式用的less

在页面调用,首先引入上面的组件

1   <div class="hello">
2     <h3>只读,不显示数字:</h3>
3     <my-rate :score="1.5" :disabled="true"/>
4     <h3>只读,显示数字:</h3>
5     <my-rate :score="3.6" :disabled="true" showText/>
6     <h3>只读,显示数字:</h3>
7     <my-rate :score="4" :disabled="true" showText/>
8     <h3>鼠标点击评分,显示数字:</h3>
9     <my-rate :score.sync="curScore" showText/>
10   </div>

这样就实现了一个封装评分的组件

免责声明:文章转载自《Vue实现Rate组件(星星评分)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇《学习之道》WPS使用书签跳转到指定的文档位置下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

vue 调用本地json配置

在webpack.dev.conf.js文件中 /*----------------jsonServer---------*/ /*引入json-server*/const jsonServer = require('json-server') /*搭建一个server*/const apiServer =jsonServer.create() /*将d...

实现一个竖直的显示表头的表格(vue版本)

今天遇到一个问题,实现这样一个竖直的显示表头的表格,如下图。默认显示两列。 vue实现代码如下:   tableComponent.vue:   <template> <table class="mailTable" :style="styleObject" v-if="s_showByRow"> <tr v-...

Vue前后端动态权限管理对接方案

前后端动态权限管理对接方案 1.用户登录 Request: { username: ‘adminxx’, password: ‘123456’ } Response: { status: ‘OK’, ok: true, comment: ‘操作成功!’, value: { token: ‘xxxxx’, .... } } 2.用户信息及按钮页面按钮权限获...

vue2 设置网页title的问题

好东东,没个标题看着多难受 看到1文章  http://blog.csdn.net/qishuixian/article/details/72912368 推荐使用 vue-wechat-title插件 npm install vue-wechat-title --save  下 看后我的使用方式 1. 在 main.js 中 import VueWech...

Vue 实战项目: 硅谷外卖(1)

第 1 章: 准备 1.1. 项目描述 1) 此项目为外卖 WebApp(SPA) 2) 包括商家, 商品, 购物车, 用户等多个子模块 3) 使用 Vue 全家桶+ES6+Webpack 等前端最新最热的技术 4) 采用模块化、组件化、工程化的模式开发 1.2. 项目功能界面 1.3. 技术选型 1.4. 前端路由 1.5. API...

vue 动态加载图片路径报错解决方法

最近遇到图片路径加载报错的问题 之前一直都是把图片放到assets的文件下的。总是报错,看到一些文章并且尝试成功了,特意记录下 首先先说明下vue-cli的assets和static的两个文件的区别,因为这对你理解后面的解决办法会有所帮助  assets:在项目编译的过程中会被webpack处理解析为模块依赖,只支持相对路径的形式,如< img sr...