Boostrap ngb-рейтинг в половину звезды

#javascript #html #twitter-bootstrap

#javascript #HTML #twitter-bootstrap

Вопрос:

Я использую ng-рейтинг для отображения среднего значения оценки. Проблема в том, что среднее значение равно 3,97. Ng-рейтинг по-прежнему отображает его как 3 звезды. Как я могу сделать так, чтобы он отображался как половина звезды? мой html:

 <div style="font-size: x-large; color: orange;"><ngb-rating [max]="5" [(rate)]="overallScore" [readonly]="false"></ngb-rating></div>
 

Пример для значения 3,67:
звезда

Редактировать: при попытке решения с сайта начальной загрузки 4 сердца, заполнение сердца немного квадратное?

Правка2:

Шаблон:

 <ng-template #t let-fill="fill">
        <span class="star" [class.full]="fill === 100">
          <span class="half" [style.width.%]="fill">⭐</span>⭐
        </span>
    </ng-template>
 

Я изменил код на css

  .star {
        position: relative;
        display: inline-block;
        font-size: 3rem;
        color: #d3d3d3;
    }
    .star.full {
        color: #ffa600;
    }
    .star.half {
        position: absolute;
        display: inline-block;
        overflow: hidden;
        color: #ffa600;
    }
 

и это дает такой результат:
звезды

Комментарии:

1. Можете ли вы включить остальную часть своего кода? Кроме того, смотрите этот учебник: ng-bootstrap.github.io/#/components/rating/examples#decimal

2. @ShaunLoftin Вы имеете в виду код, который вычисляет среднее значение по заданным данным? Потому что у меня нет никакого кода, кроме этого. Попробовал решение по вашей ссылке, но здесь возникла небольшая проблема после копирования из нее 1: 1.

Ответ №1:

Для пользовательского шаблона с десятичными дробями вы можете использовать следующее:

 <ng-template #scoreTemplate let-fill="fill">
    <span class="star" [class.full]="fill === 100">
      <span class="half" [style.width.%]="fill"></span></span>
</ng-template>

<ngb-rating max="5"
  [(rate)]="overallScore"
  [readonly]="true"
  [starTemplate]="scoreTemplate">
</ngb-rating>
 

но вам также нужны стили:

 .star {
  position: relative;
  display: inline-block;
  font-size: 3rem;
  color: #d3d3d3;

  amp;.full {
    color: #ffa600;
  }

  amp;.half {
    position: absolute;
    display: inline-block;
    overflow: hidden;
    color: #ffa600;
  }
}
 

Только для половины звезды и не для всех десятичных знаков вы можете использовать:

 <ng-template #scoreTemplate let-fill="fill">
    <span class="star" [class.full]="fill < 50">
      <span class="half" [style.width.%]="fill >= 50 ? 50 : 0"></span></span>
</ng-template>
 

Кроме того, вы можете заменить эмодзи своим пользовательским значком.

Комментарии:

1. Я пытался использовать ваш код, но перешел с scss на css (потому что я предполагаю, что это так), и я получаю результат, который вы можете увидеть в основном сообщении в edit2. Я допустил ошибку при попытке конвертировать из scss в css или это что-то другое?