PhotoSwipe:有没有办法将事件处理程序附加到 'init' 事件或插件打开灯箱时?

PhotoSwipe: Is there a way to attach an event handler to the 'init' event or when the plugin opens the lightbox?

我正在为一个项目使用 PhotoSwipe lightbox in conjuntion with Slick 轮播,我希望在 photoswipe 灯箱未打开时轮播自动播放,但当灯箱打开时,我希望自动播放停止。

PhotoSwipe API 中,他们有一个 closedestroy 事件要监听,但没有 initopen 的事件。有没有人找到这样做的好方法?

类似于:

$('#gallery').slick({
  autoplay: true,
  dots: true,
});

// ... Setup photoswipe...

pswp.listen('open', function() {
  $('#gallery').slickSetOption('autoplay', false, false);
});

pswp.listen('close', function() {
  $('#gallery').slickSetOption('autoplay', true, false);
});

pwsp.init();

所以要做到这一点,我发现你可以在初始化之前做你需要做的,然后在 close 上附加一个事件处理程序。

Slick 也存在一个问题,从版本 1.3.15 开始,使用 slickSetOption 命令无法关闭自动播放。

https://github.com/kenwheeler/slick/issues/731

根据对这个问题的评论之一,这是我的解决方法:

// ... Setup PhotoSwipe ...
slider.slickPause();
slider.find('.slick-list').off('mouseleave.slick');

gallery.listen('close', function() { 
  slider.slickPlay();
  slider.find('.slick-list').on('mouseleave.slick', function() {
    slider.slickPlay();
  });
});

gallery.init();