Я добавил eventListener на маленькие картинки, при нажатии на картинку PhotoSwipe открывает всю галерею, но не напоминает об открытии ...
Если я раскомментирую //openPhotoSwipe() в конце js файла, галерея PhotoSwipe появится при загрузке страницы, и eventListener будет работать должным образом. Но я не этого хочу ...
Я новичок в javascript ... Помощь и объяснение были бы очень признательны
function openPhotoSwipe() {
var pswpElement = document.querySelectorAll('.pswp')[0];
var pics = Array.from(document.getElementsByTagName('img'));
var items = []
pics.forEach(function(e){
items.push({src: e.src, w: 0, h: 0});
})
var options = {
history: false,
focus: false,
showAnimationDuration: 0,
hideAnimationDuration: 0,
closeOnScroll: false,
closeOnClick: false,
};
var gallery = new PhotoSwipe( pswpElement, PhotoSwipeUI_Default, items, options);
gallery.listen('gettingData', function(index, item) {
if (item.w < 1 || item.h < 1) {
var img = new Image();
img.onload = function() {
item.w = this.width;
item.h = this.height;
gallery.invalidateCurrItems();
gallery.updateSize(true);
}
img.src = item.src;
}
});
gallery.init();
};
var open = Array.from(document.getElementsByClassName("open_gallery"));
open.forEach(function(e){
e.addEventListener('click', openPhotoSwipe);
})
// openPhotoSwipe();
вот часть моего взгляда:
<div class = "container">
<h1><%= @article.title %></h1>
<p><%= @article.description %></p>
<div class = "thumb_images">
<% @article.attachments.each do | art| %>
<%= link_to image_tag art.url, class: "open_gallery" %>
<% end %>
</div>
</div>
<div class = "pswp" tabindex = "-1" role = "dialog" aria-hidden = "true">
<div class = "pswp__bg"></div>
<div class = "pswp__scroll-wrap">
<div class = "pswp__container">
<% @article.attachments.each do | art| %>
<div class = "pswp__item">
<%= image_tag art.url %>
</div>
<% end %>
</div>
<div class = "pswp__ui pswp__ui--hidden">
<div class = "pswp__top-bar">
<div class = "pswp__counter"></div>
<button class = "pswp__button pswp__button--close" title = "Close (Esc)"></button>
<button class = "pswp__button pswp__button--share" title = "Share"></button>
<button class = "pswp__button pswp__button--fs" title = "Toggle fullscreen"></button>
<button class = "pswp__button pswp__button--zoom" title = "Zoom in/out"></button>
<div class = "pswp__preloader">
<div class = "pswp__preloader__icn">
<div class = "pswp__preloader__cut">
<div class = "pswp__preloader__donut">
</div>
</div>
</div>
</div>
</div>
<div class = "pswp__share-modal pswp__share-modal--hidden pswp__single-tap">
<div class = "pswp__share-tooltip">
</div>
</div>
<button class = "pswp__button pswp__button--arrow--left" title = "Previous (arrow left)">
</button>
<button class = "pswp__button pswp__button--arrow--right" title = "Next (arrow right)">
</button>
<div class = "pswp__caption">
<div class = "pswp__caption__center">
</div>
</div>
</div>
</div>
</div>
Что вы увидите, если добавите console.info(open.length)?
console.info(open.length) возвращает 4 (так как в этой статье у меня четыре изображения)
Вы можете записать link_to как <%= link_to "#", class: "open_gallery" do %><%= image_tag art.url %><%end%>?
Спасибо @ArupRakshit! Вы дали мне лучший способ :) <%= link_to "#" do %> <%= image_tag art.url , class: "open_gallery" %> <% end %> работал лучше
вы можете сохранить класс в элементе a, он все равно будет работать из-за всплытия событий в JS.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Как вы подтвердили в комментарий, что мое предположение было правильным, ваш link_to в основном не создает желаемую разметку HTML. Итак, здесь я помещаю комментарий в качестве ответа. Напишите ссылку на метод, как показано ниже:
<%= link_to "#", class: "open_gallery" do %>
<%= image_tag art.url %>
<%end%>
Еще раз спасибо за эту бесценную помощь! Вот как я это написал: <%= link_to "#" do %> <%= image_tag art.url , class: "open_gallery" %> <% end %>
@NEL, вы можете оставить класс в link_to ... он все равно будет работать, попробуйте. И я думаю, что это должна быть ваша наценка, чтобы она покрывала область хорошего клика.
Я пробовал, но это испортило мой стиль ... (кстати, я все еще могу создать другой класс) Это лучший рубиновый способ написать его так, как вы, или это нормально "по-моему"?
@NEL по-моему .. :) Хорошо. добавьте JS-класс в тег a и сохраните open_gallery в imgae для стилизации .. или сделайте наоборот .. Но я предлагаю подключить обработчик событий к тегу <a> вместо img
Но это работает в этом небольшом примере jsbin.com/dicudivimo/edit?html,js,console,output ..