To avoid this delay, you can manually start both carousels at the same time and use individual procedures for events.
Option number 1:
- Synchronized init
- Simple trigger events on both carousels
- Pause when freezing (I missed, you didn’t need it)
$('.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>
Download Example
Option number 2
- Desynchronized init
- Duplicate events on both carousels as soon as this happens.
- No pause on mouseover
$('.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>
Please do not use the .sliding class to avoid an infinite loop.
Download Example
zessx source share