とにかく、最近bxsliderの使用を開始しましたが、問題が発生しています。
ページの読み込み時にビューポートのサイズが誤って計算されるようです。つまり、モバイルデバイスやタブレットなどではうまく機能しません。
奇妙なことに、ブラウザーのウィンドウのサイズを変更すると(たとえピクセルの場合でも)、ビューポートの高さが正しく計算され、すべてが正常に見えます。しかし、同じ高さと幅でページを更新した場合、bx-viewportは正しく計算されません。
なぜこれが起こっているのですか?
HTMLは次のようになります(そして、ええと、それはおそらくそれとは何の関係もないことは承知していますが、それでも):
<ul class="seminars-slider">
<li>
<article class="education-article">
<h3><a href="#"> Sit tincidunt eros massa, lundium ultrices, sit in aliquet velit</a></h3>
<p>LOL1</p>
<div class="buttons">
<a href="#" class="book-button"><span>Book now</span></a>
<a href="#" class="read-more"><span>Read more</span></a>
</div>
<div class="clearall"></div>
</article>
<div class="clearall"></div>
</li>
// same li
<li>
<article class="education-article">
<h3><a href="#"> Sit tincidunt eros massa, lundium ultrices, sit in aliquet velit</a></h3>
<p>LOL1</p>
<div class="buttons">
<a href="#" class="book-button"><span>Book now</span></a>
<a href="#" class="read-more"><span>Read more</span></a>
</div>
<div class="clearall"></div>
</article>
<div class="clearall"></div>
</li>
</ul>
js呼び出しは次のようになります。
slider=jQuery('.seminars-slider').bxSlider({
mode: 'vertical',
controls:false,
pager:false,
minSlides:2,
maxSlides:2,
moveSlides:1
});
jQuery('.up-control').click(function() {
slider.goToNextSlide();
});
jQuery('.down-control').click(function() {
slider.goToPrevSlide();
});
ありがとう。
BxSlider関数の呼び出しが早すぎる可能性があります。から呼び出す場合
$(document).ready(function() { ... });
代わりに使用を検討
$(window).load(function() { ... });
これら2つの関数の使用の違いは、(document).readyはDOMが初期状態でユーザーに表示されるまで待機するのに対し、(window).loadは実際にはすべてのリソースがDOMにロードされるまで待機することです。
使用できます
slider=jQuery('.seminars-slider').bxSlider({
mode: 'vertical',
controls:false,
pager:false,
minSlides:2,
maxSlides:2,
moveSlides:1
});
setTimeout(function(){
slider.redrawSlider();
},100);
bxslider githubページの「romelmederos」が提案されました。
「BxSlider v4.1-モバイルのレスポンシブWebサイトで高さのパーセンテージを使用しているため、スライダーのレンダリングに問題があります。
だから私はから変更を加える必要がありました:slider.viewport.css( 'height'、getViewportHeight());これに:slider.viewport.css( 'height'、 '');
コピーの代わりにオプションを使用してプラグインを変更しましたが、変更する最も速い方法は、上の行を変更することです。 "
1290行目でjquery.bxslider.jsを編集しました。これは私にとってはうまくいき、window.loadよりも優れた解決策のようです(window.loadを使用すると、すべてが読み込まれるまでスライダーが無効化されていました)。
_<ul>
_要素をajaxでロードしていて、画像が含まれている場合は、ロード後にslider.reloadSlider();
を試してください。最初に使用した
_setTimeout('slider.reloadSlider()',1000);
_
画像が読み込まれるのを待つのですが、最終的には画像が読み込まれるのを待つニースライブラリ ImagesLoaded に切り替えました。
_imagesLoaded('.seminars-slider', function() {
slider.reloadSlider();
});
_
(質問の名前と一致するように変数名を変更しました)
マシュー・ワトソンは私に良い考えを与えて、私はプラグインに入り、実際のgetViewPortHeight()関数を次のように更新しました:
var getViewportHeight = function(){
var height = 0;
children = slider.children;
height = jQuery(slider.children[0]).height();;
return height;
}
そこで、最初の画像の高さを取得し(うまくいけばそれらはすべて同じ…)、それを使用してスライダーの高さを決定します。コントロールは引き続きスライダーの下にありますが、CSSの配置などで修正できます。
これが失われた人々の役に立つことを願っています。
このサファリバグの解決策を見つけました。スライダーのモードを水平にする必要があります(垂直も機能するがフェードがまったく機能しないかどうかはわかりません)。次に、最初の画像の高さを取得して、「。bx-viewport」に渡す必要があります。スクリプトは次のようになります。
$( "img.Banner" ).attr( "id", "first-slide" );
$('.bxslider').bxSlider({
adaptiveHeight: true,
mode: 'horizontal',
auto: true
});
$("#first-slide").load(function(){
var height = $(this).height();
$( ".bx-viewport" ).css( "height", height );
});