star.vue 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. <template>
  2. <view class="flex space alcenter star-list" :class="size">
  3. <text v-for="(a,i) in datas" :key="i" @click="changeStar" :data-value="a" class="star iconfont iconicon_star" :style="{color:a <= getVal ? '#FFD200' : '#E4E6ED' }"></text>
  4. </view>
  5. </template>
  6. <script>
  7. export default{
  8. props:{
  9. type:{
  10. type:String,
  11. default:'star'
  12. },
  13. size:{
  14. type:String,
  15. default:'small'
  16. },
  17. value:{
  18. type:Number,
  19. default:0,
  20. },
  21. readOnly:{
  22. type:Boolean,
  23. default:false
  24. }
  25. },
  26. computed:{
  27. getVal(){
  28. return this.value;
  29. },
  30. },
  31. data(){
  32. return {
  33. myValue:0,
  34. datas:[1,2,3,4,5], //不同端 可能存在 a in number 得差异 所以用数组
  35. }
  36. },
  37. methods:{
  38. changeStar(e){
  39. if(this.readOnly) return;
  40. let val = parseInt(e.currentTarget.dataset.value);
  41. console.log(val);
  42. this.$emit('input',val);
  43. }
  44. }
  45. }
  46. </script>
  47. <style>
  48. .star-list{width: 100%;}
  49. .star-list.small{width: 380rpx;}
  50. .star-list.mini{width: 200rpx;}
  51. .star-list .star{
  52. font-size: 80rpx;
  53. }
  54. .star-list.small .star{
  55. font-size: 48rpx;
  56. }
  57. .star-list.mini .star{
  58. font-size: 32rpx;
  59. }
  60. </style>