star组件

一、star组件

<template>
    <div class="star" :class="starType">
        <span v-for="itemClass in itemClasses" :class="itemClass" class="star-item" track-by="$index" ></span>
    </div>
</template>

<script type="text/ecmaScript-6">
    const LENGTH = 5
    const CLS_ON = 'on'
    const CLS_HALF = 'half'
    const CLS_OFF = 'off'
    export default {
        props: {
          size: {
             type: Number
          },
          score: {
              type: Number
          }
      },
      computed: {
          starType() {
             return 'star-' + this.size
          },
          itemClasses() {
             let result = []
             let score = Math.floor(this.score * 2) / 2
             let hasDecimal = (score % 1 !== 0)
             let integer = Math.floor(this.score)
             for (let i = 0; i < integer; i++) {
                 result.push(CLS_ON)
             }
             if (hasDecimal) {
                 result.push(CLS_HALF)
             }
             while (result.length < LENGTH) {
                 result.push(CLS_OFF)
             }
             console.log('result', result)
             return result
          }
      }
    }
</script>

<style lang="stylus" rel="stylesheet/stylus">
    @import "../../common/styles/minxin.styl";
    .star
       font-size:0;
       .star-item
           display:inline-block
           background-repeat:no-repeat
    &.star-48
      .star-item
       20px
       height:20px
       margin-right:22px
       background-size:20px 20px
       &.last-child
          margin-right:0
       &.off
           bg-image('../../assets/img/star48_off')
       &.on
           bg-image('../../assets/img/star48_on')
       &.half
           bg-image('../../assets/img/star48_half')
    &.star-36
      .star-item
       15px
       height:15px
       margin-right:16px
       background-size:15px 15px
       &.last-child
             margin-right:0
       &.on
            bg-image('../../assets/img/star36_on')
       &.half
            bg-image('../../assets/img/star36_half')
       &.off
            bg-image('../../assets/img/star36_off')
    &.star-24
       .star-item
        10px
        height:10px
        margin-right:3px
        background-size:10px 10px
        &.last-child
            margin-right:0
        &.on
            bg-image('../../assets/img/star24_on')
        &.half
            bg-image('../../assets/img/star24_half')
        &.off
            bg-image('../../assets/img/star24_off')

</style>

二、图片背景引用

bg-image($url)
  background-image:url($url+"@2x.png")
  @media (-webkit-min-device-pixel-ratio: 3),(min-device-pixel-ratio: 3)
     background-image: url($url+"@3x.png")

三、引用

 import star from '../../components/star/star'

四、注册

 props: {
        seller: {
            type: Object
        }
      },

五、应用

<star :size="48" :score="seller.score"></star>

  

原文地址:https://www.cnblogs.com/karila/p/7562928.html