Jquery 从jCarousel插件中删除项
我有一个关于jCarousel插件的问题(来自sorgalla)。如何以正确的方式从中删除项目 你可以看到我走了多远。 试着删除一些项目,然后向右滚动,你最终会看到一个“emtpy滚动”,这就是我试图摆脱的 我尝试过使用remove();jQuery函数,而不是将css更改为显示:无;但这就产生了一个奇怪的空白区域,物品原来就在这里。 如果您查看第400行的jquery.jcarousel.js,您将看到一个remove函数,但我不确定如何使用它Jquery 从jCarousel插件中删除项,jquery,plugins,jcarousel,Jquery,Plugins,Jcarousel,我有一个关于jCarousel插件的问题(来自sorgalla)。如何以正确的方式从中删除项目 你可以看到我走了多远。 试着删除一些项目,然后向右滚动,你最终会看到一个“emtpy滚动”,这就是我试图摆脱的 我尝试过使用remove();jQuery函数,而不是将css更改为显示:无;但这就产生了一个奇怪的空白区域,物品原来就在这里。 如果您查看第400行的jquery.jcarousel.js,您将看到一个remove函数,但我不确定如何使用它 非常感谢您的帮助。谢谢 您的示例是有意义的,除非
非常感谢您的帮助。谢谢 您的示例是有意义的,除非您超出了插件的范围,jCarousel不知道如何更新自己。从文档来看,您提到的remove()方法似乎可以工作。然而,在我的试验中,我从未能让jCarousel对象真正“做正确的事情”,并更新它的按钮、滚动等等 正因为如此,我在jCarousel类上编写了一个额外的方法来实现这一点。调用removeAndAnimate(1)删除旋转木马中的第一个项目并重建所有内容,以便启用/禁用下一个/上一个按钮 同样值得注意的是,jCarousel提供的remove()函数可以防止您删除当前正在显示的项目,这正是我们想要做的(例如,允许用户通过单击图像从旋转木马中删除图像) removeAndAnimate的实施(i):
那应该行 我找到了白盒问题的根源。JCarousel method format()不替换类名,只添加新的类名。我重新编写了这个函数,它对我来说很好:
format: function(e, i) {
// remove all class names matches 'jcarousel-item' at the start
$(e)[0].className = $(e)[0].className.replace(/\bjcarousel\-item.\d-*?\b/g, '');
// add new class names
var $e = $(e).addClass('jcarousel-item').addClass('jcarousel-item-' + i).css({
'float': 'left',
'list-style': 'none'
});
$e.attr('jcarouselindex', i);
return $e;
}
我把你的两个答案结合起来,因为没有一个对我有用 我在init自定义函数中添加了它
carousel.removeAndAnimate = function(i) {
var counter = 1;
var itemsHTML = new Array();
var e = this.get(i);
children = e.parent().find("li");
$(e).remove()
$.each(children,function(){
if(counter != i) {
itemsHTML[counter] = $(this).removeAttr("class").removeAttr("jcarouselindex");
}
counter++;
});
this.size(this.options.size -1);
this.reset();
counter = 1;
carousel = this;
$.each(itemsHTML, function(k, v){
if(v != null) {
carousel.add(counter, v[0].innerHTML);
counter++;
}
});
this.reload();
}
它工作得很好
您可以添加更多的改进,如滚动回刚刚删除的项目位置。我的另一个解决方案是向加载的内容添加一个类,并删除DOM中没有此类的所有项目。一旦被
carousel.reset()
删除,这些元素就会系统地丢失添加的类
$.jcarousel.fn.extend({
removeAndAnimate: function(index) {
var itemsHTML = new Array();
var counter = 0;
// Me guardo los que quedan
for(i = 0; i < this.size(); i++)
{
if(i != (index - 1))
itemsHTML[counter++] = $('li[jcarouselindex|="' + i + '"]').html();
}
// Configuro uno menos y borro todo
this.size(this.options.size -1);
this.reset();
// Vuelvo a cargarlos
counter = 0;
for(i = 0; i < itemsHTML.length; i++)
{
this.add(counter++, itemsHTML[i]);
}
this.reload();
}
});
然后,您将能够通过以下方式移除白色框:
$("li:not(.the_class)").remove();
将其添加到carousel.Add()函数之后
它工作得很好,您甚至不需要向旋转木马添加任何功能
这是一个“易于使用”的解决方案,单击“上一步/下一步”按钮可能会显示一个白色框。要删除它,请在回调按钮nextcallback
/按钮revcallback
上应用相同的解决方案,这很好。最后我选择了一个不同的插件。
$.jcarousel.fn.extend({
removeAndAnimate: function(index) {
var itemsHTML = new Array();
var counter = 0;
// Me guardo los que quedan
for(i = 0; i < this.size(); i++)
{
if(i != (index - 1))
itemsHTML[counter++] = $('li[jcarouselindex|="' + i + '"]').html();
}
// Configuro uno menos y borro todo
this.size(this.options.size -1);
this.reset();
// Vuelvo a cargarlos
counter = 0;
for(i = 0; i < itemsHTML.length; i++)
{
this.add(counter++, itemsHTML[i]);
}
this.reload();
}
});
var carousel = jQuery('#mycarousel').data('jcarousel');
carousel.removeAndAnimate(1);
$("li:not(.the_class)").remove();