これと同じ問題がありました。以下のマークアップを使用し、最初は<div class="bxsliderWrapper">
CSSで内容を非表示にしていましたがdisplay: none;
、スライドの幅が<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()
が時間内に利用できなかったか、リソースがまだ読み込まれていないと想定しています。(私は推測しています)以下は、この動作の修正です。
<div>
withを含む Bx Slider を非表示にする代わりに、 CSS 属性display: none;
を使用してスライド イメージを非表示にしました。visibility
.bxslider .slide {
visibility: hidden;
}
これにより、準備が整うまで画像を画面に表示することなく、スライダーを正しいサイズでレンダリングできます。.css()
次に、によってトリガーされるjQuery メソッドを使用して$j(window).load()
、ページの読み込み後に可視性を変更しました。これにより、すべてのコードと要素が表示される前に存在することが保証されました。
<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()
このメソッドにより、スライダーのすべてのインスタンスが破損することがわかりました。これがより良い解決策である理由を推測しているだけですが、これをよりよく理解するために誰かが情報を追加できるかもしれません。