我在单页上有三个旋转木马滑块,我希望它们同时移动其中两个滑块。两者都应该同时更改滑块图像。两者都有相同数量的图像/幻灯片。这是我正在使用的代码:
jQuery('#carousel-example-generic1, #carousel-example-generic2').carousel({
interval: 4000
});
我也试过以下代码:
jQuery('.carousel').carousel({
pause:'false'
});
jQuery('#carousel-example-generic1').on('slide', function(){
jQuery('#carousel-example-generic2').carousel('next');
});
但左右滑块在更换幻灯片时几乎没有延迟。这种延迟继续增加。这类问题有哪些已知问题?该网站的链接是this。
JSFiddle:Link
答案 0 :(得分:12)
为避免此延迟,您可以同时手动启动两个轮播,并使用自定义的事件处理。
$('.carousel-sync').carousel('cycle');
$('.carousel-sync').on('click', '.carousel-control[data-slide]', function (ev) {
ev.preventDefault();
$('.carousel-sync').carousel($(this).data('slide'));
});
$('.carousel-sync').on('mouseover', function(ev) {
ev.preventDefault();
$('.carousel-sync').carousel('pause');
});
$('.carousel-sync').on('mouseleave', function(ev) {
ev.preventDefault();
$('.carousel-sync').carousel('cycle');
});
<div id="carousel-a" class="carousel slide carousel-sync">
...
</div>
<div id="carousel-b" class="carousel slide carousel-sync">
...
</div>
<强> Bootply example 强>
$('.carousel-sync').on('slide.bs.carousel', function(ev) {
// get the direction, based on the event which occurs
var dir = ev.direction == 'right' ? 'prev' : 'next';
// get synchronized non-sliding carousels, and make'em sliding
$('.carousel-sync').not('.sliding').addClass('sliding').carousel(dir);
});
$('.carousel-sync').on('slid.bs.carousel', function(ev) {
// remove .sliding class, to allow the next move
$('.carousel-sync').removeClass('sliding');
});
<div id="carousel-a" class="carousel slide carousel-sync" data-ride="carousel" data-pause="false">
...
</div>
<div id="carousel-b" class="carousel slide carousel-sync" data-ride="carousel" data-pause="false">
...
</div>
请避免.sliding
类,以避免无限循环。
<强> Bootply example 强>
答案 1 :(得分:1)
很抱歉,如果我错过了问题中的内容,但如果您希望上下轮播同步,则可以挂钩slid
事件,而不是slide
事件。
<强> JS:强>
jQuery('#carousel-example-generic2').carousel({
pause:'false'
});
jQuery('#carousel-example-generic2').on('slid', function(){
jQuery('#carousel-example-generic1').carousel('next');
});
答案 2 :(得分:1)
由于@zessx的答案在使用轮播指示符更改幻灯片后不再正常工作,我想根据他的选项#2提供扩展答案。此扩展答案还将同步由轮播指示器点击触发的幻灯片更改:
$('.carousel-sync').on('slide.bs.carousel', function (ev) {
// get the direction, based on the event which occurs
var dir = ev.direction == 'right' ? 'prev' : 'next';
// get synchronized non-sliding carousels, and make'em sliding
$('.carousel-sync').not('.sliding').addClass('sliding').carousel(dir);
});
$('.carousel-sync').on('slid.bs.carousel', function (ev) {
// remove .sliding class, to allow the next move
$('.carousel-sync').removeClass('sliding');
});
// sync clicks on carousel-indicators as well
$('.carousel-indicators li').click(function (e) {
e.stopPropagation();
var goTo = $(this).data('slide-to');
$('.carousel-sync').not('.sliding').addClass('sliding').carousel(goTo);
});
请注意,这要求同步的转盘具有相同数量的幻灯片。如果不是这种情况,则必须为所有同步轮播不存在“goTo”的情况添加后备。
答案 3 :(得分:0)
如果您使用的是Twitter Bootstrap 3(未选中4)。您可以使用类而不是ID。
<div id="carousel-a" class="carousel slide carousel-sync" >
...
</div>
<div id="carousel-b" class="carousel slide carousel-sync" >
...
</div>
在上述情况下,轮播同步。然后,在控件中只需使用href =“。carousel-sync”。而且它将在所有方向上起作用。