【发布时间】:2016-12-12 11:19:49
【问题描述】:
我正在尝试在响应式页面(使用 Bootstrap)上实现 bxslider,并且在前 2 或 3 次它正确显示图像。然而,在那之后它只显示一个狭窄的白色带:
如果我调整浏览器的大小,那么 bxSlider 会正确调整大小并显示图像。
我的部分代码包含以下代码(注意,这会填充一个 div 作为 AJAX 调用的结果)
<ul class="product-view-bxslider">
<% @product.images.each do |image| %>
<li><%= image_tag image.image.url %></li>
<% end %>
</ul>
<script>
$(document).ready(function(){
console.log('slider initialising');
$('.product-view-bxslider').bxSlider({
onSliderLoad: function(){
console.log('finished loading');
}
});
});
</script>
bxslider 设置工作正常,因为我总是得到预期的输出到控制台。
我已经在 Safari、Chrome 和 Firefox 中复制了这种行为。
根据我的搜索结果,大多数在使用 bxslider 时遇到过调整大小问题的人在调整浏览器大小时遇到问题,而不是在初始加载时。
编辑
为 bxslider 的布局设置初始固定高度一次显示所有图像(包括 2 个额外的 - 我假设它们用于缓冲导航)。同样,只有浏览器调整大小会强制 bxslider 调整大小并正确显示。
.bx-viewport.bx-viewport {
min-height: 90px;
}
这表明问题可能不是我最初认为的那样,是响应式布局行为不当造成的。
也许以下信息与这个问题有关。我正在使用 Rails,我之前发布的页面是 AJAX 调用 ProductsController#show 操作的结果。这里似乎没有发生任何深奥的事情:
ProductsController#show
def show
end
show.js.erb
$('#product-details').html("<%= escape_javascript(render 'products/show') %>")
_show.html.erb
在问题开始时发布
调用
<%= link_to 'Show', product, remote: true %>
【问题讨论】:
-
是的,这是一个已知问题。为什么要调整浏览器大小?
-
这就是重点……我不想调整浏览器的大小以使其正常工作。我遇到了图像不显示直到我调整浏览器大小的问题。
-
哦,拍摄...是的,您可以尝试触发
$(window).trigger("resize")操作吗? -
所以当你的 Ajax 调用返回时触发 bxSlider 调用,而不是在页面加载时。或者在 Ajax 代码完成并填充数据时触发调整大小事件。
-
@epascarello - 为了清楚起见,我正在使用 Rails 并通过使用
remote: true的链接简单地调用我的操作来让它处理 AJAX。服务器端我只是渲染一个 js.erb 页面,其中包含以下$('#product-details').html("<%= escape_javascript(render 'products/show') %>")。我不认为问题出在这不是吗?也许我找错地方了——我怀疑响应式设计是罪魁祸首。
标签: jquery html ruby-on-rails twitter-bootstrap bxslider