javascript - 为什么我的灯箱读取不了这个属性?

标签 javascript jquery html css

我用 lightgallery 创建了一个相册和 cycle2一起使用,cycle是一个轮播插件,lightgallery是一个灯箱画廊。

所以当我点击旋转木马上的任何图片时,它的图像在灯箱上打开,我想告诉你一切都很好,直到你点击旋转木马上的任何类别。所以我想打扰你这个问题

单击任何类别后,如果您单击轮播上的图像并在控制台上看到错误,则灯箱不会打开。

插件给我这个错误

lightgallery@1.3.5,lg-fullscreen@1.0.1,lg-hash@1.0.1,lg-pager@1.0.1,lg-share@1.0.1,lg-thumbnail@1.0…:10 Uncaught TypeError: Cannot read property 's' of undefined
    at new c (lightgallery@1.3.5,lg-fullscreen@1.0.1,lg-hash@1.0.1,lg-pager@1.0.1,lg-share@1.0.1,lg-thumbnail@1.0…:10)
    at Function.<anonymous> (lightgallery@1.3.5,lg-fullscreen@1.0.1,lg-hash@1.0.1,lg-pager@1.0.1,lg-share@1.0.1,lg-thumbnail@1.0…:5)
    at Function.each (jquery.min.js:2)
    at b.build (lightgallery@1.3.5,lg-fullscreen@1.0.1,lg-hash@1.0.1,lg-pager@1.0.1,lg-share@1.0.1,lg-thumbnail@1.0…:5)
    at HTMLDivElement.<anonymous> (lightgallery@1.3.5,lg-fullscreen@1.0.1,lg-hash@1.0.1,lg-pager@1.0.1,lg-share@1.0.1,lg-thumbnail@1.0…:5)
    at HTMLDivElement.dispatch (jquery.min.js:3)
    at HTMLDivElement.q.handle (jquery.min.js:3)

enter image description here

两周以来我一直在努力解决这个问题

please click to demo

$(document).ready(function() {
  options = {
    next: "#single-right",
    log: false,
    fx: "fade",
    caption: ".cycle-caption",
    captionTemplate: "{{title}}",
    pauseOnHover: true,
    pager: "#single-pager",
    pagerTemplate: "<img class='lazyload' data-src='{{exthumbimage}}' width='70' height='70'>",
    prev: "#single-left",
    slides: "div[data-hidden='false']"
  }

  function generateSlider(opt) {
    $("#myCarousel").cycle(opt);
  }

  generateSlider(options);

  $('#myCarousel').lightGallery({
    selector: "div[data-hidden='false']",
    exThumbImage: "data-exthumbimage",
    loadYoutubeThumbnail: true,
    youtubeThumbSize: 'default',
    loadVimeoThumbnail: true,
    vimeoThumbSize: 'thumbnail_medium',
  });



  $("#filter li").on("click", function() {
    var activeId = $(this).attr("id");
    if (activeId == "show-all") {
      $(".item").attr("data-hidden", "false");
    } else {
      $(".item").attr("data-hidden", "true");
      $("div[data-id = '" + activeId + "']").attr("data-hidden", "false");
    }
    $("#myCarousel").cycle("destroy");
    options['pagerTemplate'] = "<img class='lazyload' data-src='{{children.0.src}}'  width='70' height='70'>"
    generateSlider(options);
    return false;
  });

});
.mySlideShow {
  width: 700px;
  position: relative;
}

.item img {
  cursor: pointer;
}

#single-pager img {
  margin: 3px;
  cursor: pointer;
  width: 60px;
  height: 60px;
}

#filter {
  position: absolute;
  top: 0;
  right: 10%;
  z-index: 100;
}

#filter li {
  display: inline-block;
  background: rgba(0, 0, 0, .7);
  color: #FFF;
  cursor: pointer;
  padding: 12px;
}

.cycle-caption {
  position: absolute;
  bottom: 14%;
  left: 0;
  padding: 12px;
  background: rgba(0, 0, 0, .5);
  color: #FFF;
  text-align: center;
  width: 100%;
  z-index: 100;
}

div[data-hidden='true'] {
  display: none;
}
<link rel='stylesheet' href='https://cdn.jsdelivr.net/lightgallery/latest/css/lightgallery.css'>

<div class="mySlideShow">
  <div id="myCarousel">
    <div class="item" data-src="http://images.freeimages.com/images/previews/49a/massive-gear-1255802.jpg" data-exthumbimage="http://images.freeimages.com/images/previews/fa7/my-ride-1552678.jpg" data-id="animals" data-hidden="false" data-title="image 1">
      <img class="lazyload" data-src="http://images.freeimages.com/images/previews/f7a/gear-1462890.jpg" />
    </div>
    <div class="item" data-src="http://images.freeimages.com/images/previews/7ae/autos-1194364.jpg" data-exthumbimage="http://images.freeimages.com/images/previews/5f6/kaputtes-auto-1564173.jpg" data-id="sports" data-hidden="false" data-title="image 2">
      <img class="lazyload" data-src="http://images.freeimages.com/images/previews/20e/some-grill-1450817.jpg" />
    </div>


    <div class="item" data-src="https://vimeo.com/1084537" data-exthumbimage="http://sachinchoolur.github.io/lightGallery/static/img/thumb-v-y-2.jpg" data-id="natural" data-hidden="false" data-title="this is the video">
      <img class="lazyload" data-src="http://images.freeimages.com/images/previews/c23/cat-1396828.jpg" />
    </div>

    <div id="single-pager">
    </div>
  </div>
  <ul id="filter">
    <li id="animals">Animals</li>
    <li id="sports">Sports</li>
    <li id="natural">Natural</li>
    <li id="show-all">All</li>
  </ul>
  <div class="cycle-caption"></div>
</div>

<script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js'></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/jquery.cycle2/2.1.6/jquery.cycle2.min.js'></script>
<script src='https://cdn.jsdelivr.net/g/lightgallery@1.3.5,lg-fullscreen@1.0.1,lg-hash@1.0.1,lg-pager@1.0.1,lg-share@1.0.1,lg-thumbnail@1.0.1,lg-video@1.0.1,lg-autoplay@1.0.1'></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/lazysizes/3.0.0/lazysizes.min.js'></script>
<script src='https://f.vimeocdn.com/js/froogaloop2.min.js'></script>

最佳答案

当您过滤轮播元素时,您会破坏灯箱实例。所以你需要做的是:

  1. 销毁灯箱(如果您不这样做,当您尝试实例化一个新灯箱时,它将重新创建它运行所需的辅助 DOM 元素,从而导致 ID 重复,并且您的灯箱将会损坏)。你需要打电话
$('#myCarousel').data('lightGallery').destroy(true);

如果没有 true 参数,它不会被正确销毁,它只是关闭(以防它打开)。

  1. 过滤 slider 。
  2. 创建一个新的灯箱。

工作示例:https://codepen.io/anon/pen/XRemwV

文档编号:http://sachinchoolur.github.io/lightGallery/docs/api.html#methods

关于javascript - 为什么我的灯箱读取不了这个属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43789903/

相关文章:

javascript - Dexie - 数据库打开时无法添加版本

javascript - jQuery:$.get(url) 中断了我的顺序脚本执行

javascript - 鼠标中键单击链接仅打开新选项卡 ASP C#

javascript - 无法在 firebase 上上传数据?

javascript - 选择子li时如何将父li类设置为active

用于检测用户是否更改选项卡的 Javascript

javascript - 想要为全屏视频背景上的音频创建自定义静音/取消静音按钮

javascript - KEYUP 函数执行后 CSS 悬停不起作用

jquery - append 一个 div,具体取决于选中的单选按钮

html - 如何在浏览我的页面时在浏览器的地址栏中添加图片?