Есть ли способ уничтожения FlexSlider
Я пытаюсь повторно инициализировать FlexSlider без обновления страницы, когда новый список галереи вызывается асинхронно.
Я бы подумал, что процедура ниже будет работать, но это не так. Похоже, что первый FlexSlider сохраняется, даже если новые изображения успешно загружены.
есть ли способ уничтожить, а затем восстановить галерею?
спасибо
function flexInit() {
$('.flexslider').flexslider({
animation: "slide",
controlsContainer: ".paginator",
manualControls: 'a',
after: function(slider){
if(slider.atEnd == true) {
// ??? slider.destroy;
galBuild();
}
}
});
}
function galBuild() {
$.getJSON("/gallery/next/"+galID, function (data) {
var results = data.objects;
var list = $(".flexslider ul.slides");
var i = 0;
$.each(results, function () {
list.append('<li><p>' + results[i].title + '</p><img src="' + results[i].src + '"><p class="flex-caption">' + results[i++].caption + '</p></li>');
});
flexInit();
});
}
galBuild();
3 ответов
Я использую другой подход, т. е.
вы запустили один flexslider:
$('#element).flexslider({ animation: "slide", controlNav: false, directionNav: true });
когда я хочу изменить слайды в ранее созданном слайдере и перезапустить его, id делает следующие вещи:
-
создание временного div:
$('#element).before(' <div id="element_temp" class="flexslider"></div> ');
-
удалить div с ранее созданным слайдером
$('#element).remove();
-
вставить новый список слайдов во временное div:
var html = ` <ul class='slides"> <li><img src="link to image" /></li> <li><img src="link to image" /></li> <li><img src="link to image" /></li> </ul>`; $('#element_temp').html(html);
-
запустить flexslider на temp div
$('#element_temp').flexslider({ animation: "slide", controlNav: false, directionNav: true });
-
измените идентификатор div с element_temp на element
$('#element_temp').attr('id','element');
и он работает с несколькими flexliders
Роб я исследовал это и нашел решение
вам нужно изменить свои функции следующим образом
function flexInit() {
$('.flexslider').flexslider({
animation: "slide",
controlsContainer: ".paginator",
manualControls: 'a',
after: function(slider){
if(slider.atEnd == true) {
slider.addSlide(galBuild());
}
}
});
}
function galBuild() {
$.getJSON("/gallery/next/"+galID, function (data) {
var results = data.objects;
var i = 0;
$.each(results, function () {
return ('<li><p>' + results[i].title + '</p><img src="' + results[i].src + '"><p class="flex-caption">' + results[i++].caption + '</p></li>');
});
});
}
flexInit();
Также вам нужно сделать некоторые косметические изменения в flexSlider.файл JS в ползунок.update
самый простой способ-удалить flexscroll из набора данных элементов
function flexInit() {
$('.flexslider').flexslider({
animation: "slide",
controlsContainer: ".paginator",
manualControls: 'a',
after: function(slider){
if(slider.atEnd == true) {
slider.addSlide(galBuild());
}
}
});
}
//this remove flexslider form element dataset
$('.flexslider').removeData("flexslider");
и теперь вы можете позвонить
flexInit();
и ваш flexslider будет воссоздана.