PhoneGap - PhotoSwipe удаление изображений

в то время как PhotoSwipe до сих пор был фантастическим, только эти мелкие проблемы, которые я не могу обойти

Я инициализирую PhotoSwipe следующим образом

formPhoto.gallery = window.Code.PhotoSwipe.attach( images, options);

А внутри Галереи пользователь может выбрать, удалять изображение или нет через

Как только кнопка удаления нажата, это запускается

formPhoto.gallery.cache.images.splice(e.target.currentIndex,1);
delete formPhoto.activeObj.value[e.target.originalImages[e.target.currentIndex].id];


if(formPhoto.gallery.cache.images.length == 0)
   formPhoto.gallery.hide();
else 
   formPhoto.gallery.carousel.show( 0 );

Теперь это работает в основном нормально, за исключением 2 случаев.

  1. Если вы находитесь ниже 3 фотографий, это прерывает событие слайда (на слайде справа) - изображение перемещается на черный экран. Если вы удалите и у вас останется только 1 изображение, вы даже не сможете правильно просмотреть изображение, оно просто вернется на черный экран.
  2. Если вы снова добавите изображения в галерею, старые изображения, которые были удалены, снова будут показаны.

Он повторно инициируется с помощью

images = [];
for(var x in formPhoto.activeObj.value)
  images.push({url: formPhoto.activeObj.value[x].file, id:x});

formPhoto.gallery = window.Code.PhotoSwipe.attach( images, options);

Если хочешь, я могу попробовать сделать запись того, что происходит. Я не уверен, как это решить, я просмотрел https://github.com/codecomputerlove/PhotoSwipe/issues и Google, но ничего полезного.

Все, что я действительно хочу сделать, это просто удалить изображение из галереи (оно просматривается только в эксклюзивном режиме)


person DdD    schedule 10.05.2012    source источник


Ответы (2)


Хорошо, в итоге я написал временное решение... оно немного хакерское, но я просто вручную удаляю DOM из карусели.

            jQuery(formPhoto.gallery.carousel.contentEl).find("[src*=\"" + formPhoto.activeObj.value[e.target.originalImages[e.target.currentIndex].id].file + "\"]").parent().remove();
            //we look for the image that contains the same filename as the one we're trying to delete.
            //so we just remove that.

            formPhoto.gallery.cache.images.splice(e.target.currentIndex,1);

            delete formPhoto.activeObj.value[e.target.originalImages[e.target.currentIndex].id];
            e.target.originalImages.splice(e.target.currentIndex, 1);


            formPhoto.activeObj.object.find("[type=amountadded]").html(formPhoto.activeObj.valueLength() + " photos");

            if(formPhoto.gallery.cache.images.length == 0)
                formPhoto.gallery.hide();
            else   {
                //real hacky job. Atleast it looks like a real cool effect occured.
                formPhoto.galleryInitiate(formPhoto.activeObj, e.target.originalImages);
            }

Также исправлена ​​проблема с повторным появлением изображений из-за того, что вновь сгенерированные файлы имели одинаковые имена файлов. Добавлен компонент даты в имена файлов для среднего времени.

person DdD    schedule 10.05.2012

Это обработчик кнопки удаления

function ps_delete_image(btn) {
    var inst = PhotoSwipe.instances[0];
    var curImg = $photoSwipe.getCurrentImage();
    inst.cache.images.splice(inst.currentIndex, 1);
    inst.originalImages.splice(inst.currentIndex, 1);
    if(inst.cache.images.length == 0) inst.hide();
    else {
        if (inst.currentIndex == inst.cache.images.length) inst.carousel.show(inst.currentIndex - 1);
        else inst.carousel.show(inst.currentIndex);
    }
    // remove delete button if 3 or less is left
    if(inst.cache.images.length <= 3) {
        $(btn).remove();
    }
}

Чтобы решить проблему с 3 и менее изображениями, я просто удаляю кнопку удаления.

person bora89    schedule 28.05.2014