mpvue 星星打分组件

上图:

<template>
  <div class="container">
    <div v-for="(star,index) in stars" :key="index" style="position: relative">
      <img :src="star.img"  :style="{'width':(2*width + 'rpx'),'height':(2*height + 'rpx')}">
      <div class="left" @click="scoreBtn(1,index)"></div>
      <div class="right" @click="scoreBtn(2,index)"></div>
    </div>
  </div>
</template>

<script>
    export default {
      props:["imgs","width","height","starValue"],
      data(){
        return {
          stars:[]
        }
      },
      mounted(){
        this.stars = [
          {img:this.imgs[0]},
          {img:this.imgs[0]},
          {img:this.imgs[0]},
          {img:this.imgs[0]},
          {img:this.imgs[0]}
        ]
      },
      methods:{
        scoreBtn(type,index){
          let score = type === 1? (this.starValue /2):this.starValue;
          this.stars[index].img = type === 1? this.imgs[1]:this.imgs[2];
          this.stars.forEach((val,ind)=>{
            if(ind < index){
              score += this.starValue;
              val.img = this.imgs[2];
            }else if(ind > index) {
              val.img = this.imgs[0];
            }
          });
          this.$emit("ok",score)
        }
      }
    }
</script>

<style scoped>
  .container{
    display: flex;
    flex-direction: row
  }
.right{
  position: absolute;
  width: 50%;
  height: 100%;
  top: 0;
  left: 50%;
}
  .left{
    position: absolute;
    width: 50%;
    height: 100%;
    top: 0;
    left: 0;
  }
</style>

<!--
  属性          类型        单位          说明
  imgs         Array        无          imgs为三种状态图片url的数组(注意:数组的顺序为 空心图片url》 半实心图片url 》 实心图片url)
  width        number       px            星星的宽度
  height       number       px            星星图片的高度
  starValue    number       无            每个星星代表分值
  ok           method       无             打分后的回调,返回一个分值

 距离:
 <score :imgs="imgs" :width="width" :height="height" :starValue="starValue" @ok="back"></score>

-->

  

 

posted on 2018-09-17 15:59  changYao  阅读(630)  评论(0编辑  收藏  举报