#jquery #ruby
#jquery #ruby
Вопрос:
Я разрабатываю приложение Rails, и мне нужно автоматически увеличивать очень простую строку в списке голосования на основе числа.
Мой код — я на самом деле не хочу, чтобы он увеличивался при нажатии, но я просто предоставляю это в качестве ссылки:
jQuery:
$j(".starStats div").click(function() {
$j(this).parent().animate({
width: ' =100px'
}, 500);
$j(this).prev().html(parseInt($j(this).prev().html()) 1);
return false;
});
HTML:
<% (1..5).to_a.reverse.each do |n| %>
<tr class="starStats">
<td><strong><%= n %> star</strong><span><%= vote.rate_summary ? vote.rate_summary[n].to_i : 0 %></span> <div>amp;nbsp;</div></td>
<td>(<%= vote.rate_summary ? vote.rate_summary[n].to_i : 0 %>)</td>
</tr>
<% end %>
Стиль CSS:
.starStats div { background: #fbbf55; float: right; margin-right: 5px;width: 90px; }
.starStats span { display: none; }
Пример необходимых результатов:
5 звезд: xxxxxxxxxx (296)
4 звезды: xxx (28)
3 звезды: x (15)
2 звезды: x (16)
1 звезда: xxxxx (111)
Мне просто нужна помощь с jQuery для реализации правильной длины строки в зависимости от числа голосов.
Комментарии:
1. Может быть, было бы лучше иметь 5 разных изображений в качестве длины полосы. PNG поддерживает прозрачность и совместим с несколькими браузерами. Это более простой путь.
2. хорошо, спасибо. как мне загружать правильную длину строки при каждой загрузке страницы?
3. В вашем примере, если у вас 296 голосов по 5 звезд, какой ширины вы хотите, чтобы ваш div?
4. это действительно хороший вопрос. Ширина не должна быть больше 90 пикселей … не уверен, как заставить это работать. Если ширина не определяется с шагом? Например, 1-50 может быть 10 пикселей, 51-100 — 20 пикселей и т. Д.?
5. Вы должны быть в состоянии сделать это без изображений. Я не знаю Ruby on Rails, но я попробовал свои силы в этом, ответив, что это чистый HTML, а затем также попытался предоставить эквивалент Ruby.
Ответ №1:
Будет ли что-то вроде этого работать:
http://jsfiddle.net/khalifah/HGzqB/
Я попробовал код ruby, поскольку я не знаю Ruby.
JavaScript:
jQuery:
$j( ".starStats" ).each(function()
{
var totalVotes = parseInt( $j(".total-votes").text() ),
votes = parseInt( $j(this).find(".votes .number").text() );
$j( this ).find( ".percent" ).animate({
width: ' =' ( votes / totalVotes) * 100
}, 500);
});
HTML:
<% (1..5).to_a.reverse.each do |n| %>
<tr class="starStats">
<td><strong><%= n %> star</strong></td>
<td class="bar"><div class="percent"></div></td>
<td class="votes">(<span class="number"><%= vote.rate_summary ? vote.rate_summary[n].to_i : 0 %></span>)</td>
</tr>
<% end %>
Ответ №2:
Может быть, было бы лучше иметь 5 разных изображений, представляющих каждую разную длину строки.
PNG поддерживает прозрачность и совместим с несколькими браузерами. Это более простой путь по сравнению с CSS.
Если вы используете jQuery, вы можете изменить src
атрибут <img>
тега, используя что-то вроде:
<!-- You're loading a brand new page. No Reviews as of yet. -->
<img class="fivestar" src="path/to/empty.jpg" alt="no reviews yet" />
<!-- Load the appropriate CSS class to whatever object has a Five Star review -->
$(".fivestar").attr("src", "path/to/fivestarbar.png");