Рейтинг на CSS и JavaScript
Рейтинг на CSS и JavaScript
Один из ставших привычным элементов web-страниц - рейтинг. Это может быть средняя пользовательская оценка какой-нибудь статьи, популярность товара или что-нибудь подобное. Обычно рейтинг представляет собой полоску с пятью или десятью звездочками, часть из которых серая, а часть, соответствующая значению рейтинга, - золотистая. Сегодня я расскажу, как сделать отображение такого рейтинга и как он может взаимодействовать с пользователем.
Есть несколько вариантов верстки рейтинга, мне больше всего нравится блок состоящий из двух элементов DIV: фоновый с относительным позиционированием и вложенный с абсолютным позиционированием относительно родительского. Внешний DIV по высоте соответствует высоте изображения одной звездочки, а по ширине точно равен максимальному количеству звездочек, умноженному на их ширину. Так, если отдельное изображение звездочки равно 32х32 пиксела, а максимальная оценка 5 звездочек, то внешний DIV будет иметь размеры 160х32 пикселов. В качестве фона используются серые звездочки, повторяющиеся по горизонтали. Внутренний DIV по высоте также равен высоте изображения, а вот по ширине равен проценту рейтинга. Здесь в качестве фонового изображения используется уже золотая звездочка, также размноженная по горизонтали. Оба изображения звездочек, серая и золотистая, обязательно должны иметь одинаковые размеры и форму.
Такой вариант реализации позволяет отображать "нецелые" звездочки, у которых закрашена только часть изображения. А главное, что он очень прост в реализации. Начнем с описания контейнеров в таблице CSS.
Code: Убрать нумерацию
- /* внешний контейнер - фон с серыми звездочками */
- .rate_background {
- position: relative;
- width: 160px;
- height: 32px;
- background:url('star_gray.png') repeat-x;
- }
- /* внутренний контейнер - полоса рейтинга с золотыми звездочками */
- .rate_bar {
- position: absolute;
- top: 0px;
- left: 0px;
- height: 32px;
- background:url('star_gold.png') repeat-x;
- }
Code (HTML) : Убрать нумерацию
- <!-- полоса рейтинга установлена на 35% -->
- <div class="rate_background">
- <div class="rate_bar" style="width:35%;"></div>
- </div>
Но просто показывать полосу рейтинга недостаточно, у пользователя должна быть возможность проголосовать и выставить свою оценку. Добавим немного интерактива при помощи скрипта JavaScript. Он будет получать координаты клика на полосе рейтинга и преобразовывать их в значение от 1 до 5, соответствующее оценке пользователя. Это значение затем можно обработать, например, отправить на сервер через AJAX, получить новое значение рейтинга и выставить нужный процент ширины полосы рейтинга.
Code (JavaScript) : Убрать нумерацию
- function set_rate(event, el) {
- // Позиция клика относительно элемента
- event = event || window.event;
- if (event.clientX<=el.clientWidth) {
- var rate=Math.ceil(event.clientX/el.clientWidth*5);
- // Теперь значение rate от 1 до 5 можно обрабатывать как надо,
- // например, отправить на сервер через AJAX
- }
- }
Code (HTML) : Убрать нумерацию
- <div class="rate_background" onclick="set_rate(arguments[0], this);">
- <div class="rate_bar" style="width:35%;"></div>
- </div>
Просмотров: 8204 | Комментариев: 5
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
Ваня
(06.06.2019 в 13:52):
Норм
DiPrm
(03.11.2017 в 16:41):
Спасибо, статья помогла. Сэкономила время!
ManHunter
(27.07.2017 в 14:19):
Никогда не надо использовать jquery. VanillaJS обходит его по всем параметрам.
Иван
(27.07.2017 в 14:12):
Спасибо! Очень полезно!
Я тут всю голову уже сломал настраивая jquery raty, и даже в голову не приходил такой простой вариант решения!
Я тут всю голову уже сломал настраивая jquery raty, и даже в голову не приходил такой простой вариант решения!
Андрей
(09.08.2016 в 18:21):
круто
Добавить комментарий
Заполните форму для добавления комментария