有同样的问题。我使用下面的标记,最初用 CSS display: none; 隐藏了包含 <div class="bxsliderWrapper"> 我注意到幻灯片 <div class="slide"> 的宽度呈现为 1px。
我怀疑这与响应式功能有关,它采用隐藏的初始容器的尺寸,并为每张幻灯片定义匹配的内联样式。
<div class="bxsliderWrapper">
<div class="bxslider">
<div class="slide">Your Content</div>
<div class="slide">Your Content</div>
<div class="slide">Your Content</div>
</div>
</div>
我的解决方案类似于上面提到的 bradrice 关于使用内置回调函数的方法。我只是将reloadSlider() 函数添加到show() 函数中。
<script type="text/javascript">
var $j = jQuery.noConflict();
$j(document).ready(function(){
var homeSlider = $j('.bxslider').bxSlider();
$j(".bxsliderWrapper").show(0, "swing", function(){homeSlider.reloadSlider();});
});
</script>
一旦 show() 完成就会触发重新加载。
.
已编辑
上面的原始解决方案最初有效,但在硬刷新shift + REFRESH 期间清除缓存时遇到问题。我假设.show() 函数所针对的元素未及时可用或资源尚未加载。 (我猜)下面是针对这种行为的修复方法。
我没有使用display: none; 隐藏包含<div> 的Bx Slider,而是使用visibility CSS 属性隐藏了幻灯片图像。
.bxslider .slide {
visibility: hidden;
}
这允许滑块以正确的大小呈现,而不会在屏幕上看到图像,直到它们准备好。然后我使用由$j(window).load() 触发的jQuery .css() 方法来更改页面加载后的可见性。这确保了所有代码和元素在显示之前就已经存在。
<script type="text/javascript">
var $j = jQuery.noConflict();
$j(document).ready(function(){
var homeSlider = $j('.bxslider').bxSlider();
});
$j(window).load(function(){
$j(".bxslider .slide").css("visibility", "visible");
});
</script>
此方法也适用于同一页面上的多个滑块。我发现.show() 方法导致滑块的所有实例都中断。我只是猜测为什么这是一个更好的解决方案,但也许有人可以添加一些信息来更好地理解这一点。