在我的网站上,在每一页的底部,我都有一组图像。该集合在 7.5 秒后淡入另一个集合。
问题是图像可以有不同的宽度,我需要根据每个图像的宽度计算出每个集合中要放入多少个图像。
我的网站总共有 960 像素宽,每张图片都需要有一个右侧边距,比如 15 像素。所以,如果我有 7 个图像的集合(假设集合中的最后一个图像没有右边距),我正在查看 870 像素的总允许宽度。
我可以检索每个图像的宽度,所以现在我需要一种方法将它们放在一个集合中,该集合具有自己的 div 和 id,以便我使用 jQuery 获取和淡出。
以下代码适用于相同宽度的图像。
JS:
<% @logo_group_size = 7 %>
<script type="text/javascript">
<% unless (@logos || Logo.order(:position)).empty? %>
var logo_sets = [<%= (@logos || Logo.order(:position)).in_groups_of(@logo_group_size, false).collect{|x| (@logos || Logo.order(:position)).in_groups_of(@logo_group_size, false).index(x)}.join(', ') %>];
var logo_sets_max = <%= (@logos || Logo.order(:position)).in_groups_of(@logo_group_size, false).length - 1 %>;
var logo_set_index = 0;
function fadeLogoSets() {
$("#logo_set_" + logo_sets[logo_set_index]).fadeOut();
if (logo_set_index < logo_sets_max) { logo_set_index += 1; } else { logo_set_index = 0; }
$("#logo_set_" + logo_sets[logo_set_index]).fadeIn();
setTimeout("fadeLogoSets()" , 7500);
}
$(document).ready(function() {
setTimeout("fadeLogoSets()", 7500);
});
<% end %>
</script>
看法:
<% unless (@logos || Logo.order(:position)).empty? %>
<% maximum_width = (960 - ((@logo_group_size - 1) * 15)) %>
<div class="logos">
<h2>Logos</h2>
<% (@logos || Logo.order(:position)).in_groups_of(@logo_group_size, false).each_with_index do |logo_set, index| %>
<% set_width = 0 %>
<%= content_tag(:div, :id => "logo_set_#{index}", :style => (index.zero? ? "display: block;" : "display: none;")) do %>
<% logo_set.each_with_index do |logo, index| %>
<% set_width += MiniMagick::Image.open(("http://#{request.env["HTTP_HOST"]}" + logo.image.home.to_s))["width"].to_i %>
<% image_options = {} %>
<% image_options.merge!({:style => "margin-right: 0px;"}) if index == (@logo_group_size - 1) %>
<% if logo.link.blank? %>
<%= image_tag(logo.image.home, image_options) %>
<% else %>
<%= link_to(image_tag(logo.image.home, image_options), logo.link, {:target => "_blank"}) %>
<% end %>
<% end %>
<% end %>
<% end %>
</div>
<% end %>
我确实理解这个问题有些主观。