Vue实现Rate组件(星星评分)这个功能就类似于某宝在购物之后,对商品进⾏评价
先看⼀下效果
那么实现这个功能也很简单,新建⼀个my-rate组件,然后上代码
1 <template>
2 <div class="rate" :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 :class="getClass(i)"
12 >
13 <i v-if="disabled&&i==Math.floor(score)+1" class="icon-star" :></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,
25default: 0
26 },
27// 是否只读,默认false,⿏标点击可以打分
28 disabled: {
29 type: Boolean,
30default: false
31 },
32// 是否显⽰分数,默认false
33 showText: {
34 type: Boolean,
35default: false
36 }
37 },
38 data () {
39return {
40 curScore: '',
41 width: ''
42 }
43 },
44 created: function () {
46 },
47 methods: {
48 getClass (i) {
49if (this.curScore === '') {
50return i <= this.score ? 'icon-star' : 'icon-star-o'
51 } else {
52return i <= this.curScore ? 'icon-star' : 'icon-star-o'
53 }
54 },
55 getDecimal () {
56this.width = Number(this.score * 100 - Math.floor(this.score) * 100) + '%'
margin rate57 },
58 setScore (i) {
59this.$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 width: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 width: 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>
这样就实现了⼀个封装评分的组件
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论