Итак, у меня есть массив изображений, которые я хочу загрузить в галерею с помощью Photoswipe, но у меня возникают проблемы с предварительным определением ширины и высоты изображения. В частности, я думаю, что мне нужно предварительно загрузить изображения
Вот мой JS для рендеринга страницы, здесь я определяю слайды и перечисляю их как локальную переменную для страницы ejs:
var sizeOf = require('image-size');
var url = require('url');
var http = require('http');
var slideshow = [];
for(var i = 0; i < listing.listing_images.length; i++) {
var image = listing.listing_images[i];
var width, height = 0;
var imgUrl = image.url;
var options = url.parse(imgUrl);
http.get(options, function (response) {
var chunks = [];
response.on('data', function (chunk) {
chunks.push(chunk);
}).on('end', function() {
var buffer = Buffer.concat(chunks);
**height = sizeOf(buffer).height;
width = sizeOf(buffer).width;**
});
});
var item = {
src: image.url,
h: height,
w: width
};
slideshow.push(item);
}
res.render('example.ejs', {
listing: listing,
slides: slideshow
});
А вот скрипт на странице ejs:
<% var slides = locals.slides %>
<script>
$('document').ready(function() {
var pswpElement = document.querySelectorAll('.pswp')[0];
// build items array using slideshow variable
var items = <%- JSON.stringify(slides) %>;
console.log(items);
// grab image
if (items.length > 0) {
// define options (if needed)
var options = {
// optionName: 'option value'
// for example:
index: 0 // start at first slide
};
// Initializes and opens PhotoSwipe
var gallery = new PhotoSwipe( pswpElement, PhotoSwipeUI_Default, items, options);
gallery.init();
}
</script>
По сути, происходит то, что массив элементов фотосвайпа передается нормально, но ширина и высота не устанавливаются до тех пор, пока фотосвайп не инициализируется и не вызовет загрузку img. Таким образом, изображения не отображаются, потому что их высота и ширина еще не установлены.
Есть ли способ инициировать загрузку изображений в массиве слайд-шоу, чтобы ширина и высота устанавливались перед передачей в Photoswipe? Я также пытался посмотреть, могу ли я просто сначала установить их на 0, а затем попытаться обновить высоту и ширину позже и попытаться принудительно перезагрузить фотосвайп, но фотосвайп не распознает новую высоту / ширину изображения.
Извините, если что-то из этого неясно / запутано ерундой ejs, не стесняйтесь спрашивать что-либо, и я хотел бы уточнить.
Спасибо