2012-05-10 3 views
0

в то время как PhotoSwipe была фантастической до сих пор только эти незначительные проблемы, которые я не могу показаться, чтобы обойтиPhoneGap - 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); 

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

  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, но ничего не помогло.

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

ответ

0

Хорошо, я закончил писать временное решение .. его немного Hacky, но я просто вручную удалить 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); 
      } 

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

0

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

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-х и менее изображениями, которые я просто удалить кнопку удалить.

Смежные вопросы