Ваш пример имеет смысл, за исключением того, что вы выходите за пределы плагина, jCarousel не знает, как себя обновить. Из документов кажется, что метод remove (), который вы упомянули, будет работать. Тем не менее, в моих испытаниях я никогда не мог заставить объект jCarousel действительно «делать правильные вещи» и обновлять его кнопки, прокручивать и т. Д.
Из-за всего этого я написал дополнительный метод для класса jCarousel, который делает именно это. Вы вызываете removeAndAnimate (1), чтобы удалить первый элемент в карусели и перестроить все, чтобы кнопки «следующий / предыдущий» были включены / отключены, и все работает.
Также стоит отметить, что функция remove (), предоставляемая jCarousel, не позволяет вам удалить элемент, который отображается в данный момент, и это именно то, что мы хотели сделать (позволить пользователю удалить изображение из карусели, нажав на него, например).
Реализация для removeAndAnimate (i):
removeAndAnimate: function(i) {
var e = this.get(i);
var d = this.dimension(e);
if (i < this.first) this.list.css(this.lt, $jc.intval(this.list.css(this.lt)) + d + 'px');
e.remove();
this.options.size--;
var di = this.options.visible != null ? Math.ceil(this.clipping() / this.options.visible) : null;
var li = this.list.children('li');
var self = this;
if (li.size() > 0) {
var wh = 0, i = this.options.offset;
li.each(function() {
self.format(this, i++);
wh += self.dimension(this, di);
});
this.list.css(this.wh, wh + 'px');
}
this.scroll(0,true);
this.buttons();
}
Я рекомендую размещать это сразу после реализации remove (). Чтобы получить доступ к самому экземпляру jCarousel с помощью jQuery, вне функций обратного вызова:
var carousel = $("#mycarousel").data("jcarousel");
carousel.removeAndAnimate(1);
Это должно сработать!