bxslider在加载时计算错误的视口大小

无论如何,我最近开始使用bxslider,我遇到了问题。

它似乎在页面加载时错误地计算了它的视口大小,这意味着它在移动设备,平板电脑等上不能正常工作。

奇怪的是,当我调整浏览器窗口的大小(即使只是一个像素)时,视口高度得到正确计算,一切看起来都很好。 但是如果我刷新具有相同高度和宽度的页面,则无法正确计算bx-viewport。

知道为什么会这样吗?

HTML看起来像这样(是的,我知道它可能与它没有任何关系,但仍然):

 

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() { ... });

使用这两个函数之间的区别在于(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 – 由于我在移动设备的响应式网站中使用高度百分比,因此存在滑块渲染问题。

所以我不得不改变:slider.viewport.css(’height’,getViewportHeight()); 对此:slider.viewport.css(’height’,”);

我在我的副本中使用选项更改了插件,但更改的最快方法是修改上面的行“


我在1290行编辑了我的jquery.bxslider.js; 这对我来说很有用,似乎比window.load更好的解决方案(使用window.load滑块被破坏,直到所有内容都被加载。)

如果要使用ajax加载

    元素并且它包含图像,请尝试使用slider.reloadSlider(); 负载后。 我先用过

     setTimeout('slider.reloadSlider()',1000); 

    等待图像加载,但最终我切换到将等待图像加载的好库ImagesLoaded :

     imagesLoaded('.seminars-slider', function() { slider.reloadSlider(); }); 

    (更改了变量名以匹配问题的那些)

    Matthew Watson给了我一个好主意,我进入了插件并更新了实际的getViewPortHeight()函数,如下所示:

     var getViewportHeight = function(){ var height = 0; children = slider.children; height = jQuery(slider.children[0]).height();; return height; } 

    所以现在它取第一张图像的高度(希望它们都是一样的……)并用它来确定滑块的高度。 请注意,您的控件仍然位于滑块下方,但可以使用css定位等进行修复。

    希望这能帮助一些失去的人。

    找到了这个safari bug的解决方案。 您必须将滑块的模式设置为水平(不确定垂直是否也有效,但淡入淡出根本不起作用)。 然后你必须获得第一个图像的高度并将其传递给“.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 ); });