我正在使用 bxSlider 库开发一个站点。使用默认设置,它在 Chrome 和 Firefox 中都表现良好。
HTML是标准:
<div id="home_title_gallery">
<span class="bxslider_stepback" id="bxslider_PagesTitle_1_left"></span>
<span class="bxslider_stepforward" id="bxslider_PagesTitle_1_right"></span>
<div class="bxslider" id="bxslider_PagesTitle_1">
<div id="bxslider_PagesTitle_1_0">
<img src="/custom/public/images/.slider-01.980.435.0.1.c.png" alt="" title="" data-caption="" data-description="" id="bxslider_PagesTitle_1_0_2500"></div>
<div id="bxslider_PagesTitle_1_1">
<img src="/custom/public/images/.slider-02.980.435.0.1.c.png" alt="" title="/gluten-free-wheat-free-recipes" data-caption="" data-description="" id="bxslider_PagesTitle_1_1_2501"></div>
<div id="bxslider_PagesTitle_1_2">
<img src="/custom/public/images/.slider-03.980.435.0.1.c.png" alt="" title="" data-link="/nutrition-media" data-caption="" data-description="" id="bxslider_PagesTitle_1_2_2502"></div>
<div id="bxslider_PagesTitle_1_3">
<img src="/custom/public/images/.slider-04.980.435.0.1.c.png" alt="PureBred Gluten Free Bread Wheat Free Bread" title="PureBred Gluten Free Wheat Free Bread" data-caption="" data-description="" id="bxslider_PagesTitle_1_3_2503"></div>
<div id="bxslider_PagesTitle_1_4">
<img src="/custom/public/images/.slider-05.980.435.0.1.c.png" alt="" title="" data-caption="" data-description="" id="bxslider_PagesTitle_1_4_2504"></div>
<div id="bxslider_PagesTitle_1_5">
<img src="/custom/public/images/.slider-06.980.435.0.1.c.png" alt="" title="" data-caption="" data-description="" id="bxslider_PagesTitle_1_5_2505"></div>
</div>
</div>
(以前,它是嵌套 div ul
,而li
不是嵌套 div。但是,行为是相同的。)
bxSlider 库是这样启动的:
app.onload(function(){
$('.bxslider').each(function() {
var id = $(this).attr('id');
var right_arrow = app.get(id + '_right');
var left_arrow = app.get(id + '_left');
$(this).bxSlider({
'pager': false,
'auto': true,
'nextSelector': right_arrow,
'prevSelector': left_arrow,
'nextText': 'Step forward',
'prevText': 'Step back'
});
});
});
我使用的是我们的 homegrown app.onload()
,而不是$(document).ready()
,因为我实际上不希望画廊在加载图像之前开始滑动。这是功能:
var app = {
get: function(id) {
return document.getElementById(id);
},
onload: function(func) {
// http://www.dustindiaz.com/top-ten-javascript/
var oldonload = window.onload;
if (typeof window.onload !== 'function') {
window.onload = func;
} else {
window.onload = function() {
if (oldonload) {
oldonload();
}
func();
};
}
},
onunload: function(func) {
// based on above
var oldonunload = window.onunload;
if (typeof window.onunload !== 'function') {
window.onunload = func;
} else {
window.onunload = function() {
if (oldonunload) {
oldonunload();
}
func();
};
}
}
};
这在 Firefox 中运行良好,但在 Chrome 中似乎是随机的。稍微超过一半的时间,javascript 根本无法运行,我在页面下方一直留下一组大图像,根本没有滑动。Chrome 调试器中没有显示相关的错误消息。在几个地方添加console.log()
表明我们确实到达了函数$(this).bxSlider()
(console.log()
无论如何都会触发它的正上方),但它没有做任何事情。
我怎样才能弄清楚这里发生了什么,我该如何解决?
我曾经认为这与自定义上一个和下一个按钮有关。当我把它们拿出来时它起作用了:
$(this).bxSlider({
'pager': false,
'auto': true,
});
但现在我认为这只是平局的运气(它的行为不正常,记住)。现在没有它们也行不通。嗯,有时确实如此。更多时候不是。