slide method
Implementation
void slide(String type, [Element? next]) {
final activeItem = active,
items = $element.find('.item'),
nextItem = next ??
(type == 'next' ? activeItem?.nextElementSibling ?? items.first :
type == 'prev' ? activeItem?.previousElementSibling ?? items.last :
null);
final direction = type == 'next' ? 'left' : 'right';
/*
, isCycling = this.interval
*/
_sliding = true;
/*
isCycling && this.pause()
*/
final e = QueryEvent('slide.bs.carousel', data: {
'relatedTarget': nextItem,
'direction': direction
});
if (nextItem == null || nextItem.classes.contains('active'))
return;
final indicators = _indicators;
if (indicators != null) {
$(indicators).find('.active').removeClass('active');
$element.one('slid.bs.carousel', (QueryEvent e) {
final elems = indicators.children,
index = activeIndex;
if (index > -1 && index < elems.length)
elems[index].classes.add('active');
});
}
$element.triggerEvent(e);
if (e.defaultPrevented || activeItem == null)
return;
if (Transition.isUsed && element.classes.contains('slide')) {
nextItem.classes.add(type);
$(nextItem).reflow(); // force reflow
activeItem.classes.add(direction);
nextItem.classes.add(direction);
$element.one(Transition.end, (QueryEvent e) {
nextItem.classes
..removeAll(['type', direction])
..add('active');
activeItem.classes.removeAll(['type', direction]);
_sliding = false;
Timer.run(() {
$element.trigger('slid.bs.carousel');
});
});
} else {
activeItem.classes.remove('active');
nextItem.classes.add('active');
_sliding = false;
$element.trigger('slid.bs.carousel');
}
/*
isCycling && this.cycle()
*/
}