Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как применить просмотрщик фотографий к динамически сгенерированному контенту (https://javascript.ru/forum/misc/75574-kak-primenit-prosmotrshhik-fotografijj-k-dinamicheski-sgenerirovannomu-kontentu.html)

Sate 21.10.2018 13:15

Как применить просмотрщик фотографий к динамически сгенерированному контенту
 
Добрый день.
У меня есть сайт в виде блога, у которого на главной странице отображаются посты блога.
При прокрутке вниз я делаю догрузку следующих записей из блога, и получаю аля ленту ВК.

Так вот, у каждого поста есть заголовок, текст до ката и набор фотографий.
Все фотки обернуты компонентом SmartPhoto (хз, можно ли ссылку тут выкладывать или нет, но думаю вы знаете про такой просмотрщик).

Так вот внизу страницы стоит код:

$(document).ready(function () {
        $(".js-smartphoto").SmartPhoto({
            nav: false,
            resizeStyle: 'fit'
        });
    });


Который ищет все объекты с классом js-smartphoto и делает из них галереи.
Все работает хорошо, до тех пор пока не придет очередная порция контента при скролинге вниз.

Кстати контент добавляется ajax запросом по урлу с оффсетом, который возвращает 5 следующих записей, и далее если есть такие записи то делаю
$("#content").append(result);


HTML код со статьями выглядит примерно так
<div id="content">
<div class="article">...</div>
<div class="article">...</div>
<div class="article">...</div>
<div class="article">...</div>
<div class="article">...</div>
</div>


Что пробовал делать:

после append результата снова вызывать $(".js-smartphoto").SmartPhoto(), но в этом случае те записи которые выше дублируются и на каждую фотку создаются две галереи и т.д.

Подскажите пожалуйста как сделать это работоспособным?

laimas 21.10.2018 13:30

Sate, либо в доках слайдера ищите метод типа udate и т.п., либо в результате ajax запроса устанавливайте плагин для только полученного контента.

Sate 21.10.2018 13:31

а можно пример как только для нового контента создать объекты SmartPhoto?

laimas 21.10.2018 13:39

Ну если js-smartphoto, это класс изображений для слайдера, а допустим имя переменной в функции обработки результата асинхрогого запроса равно data, значит:

$(data).find(".js-smartphoto").SmartPhoto({......

Sate 21.10.2018 13:49

Сделал вот так
success: function (result) {
                    $("#content").append(result);
                    $(result).find(".js-smartphoto").SmartPhoto({
                        nav: false,
                        resizeStyle: 'fit'
                    });
                },


Не работает (

laimas 21.10.2018 14:04

$(result).find(".js-smartphoto").SmartPhoto({...}).end().appendTo("#content")


$("#content").append(result); - удалить.

Sate 21.10.2018 21:50

Все получилось.
Спасибо :)


Часовой пояс GMT +3, время: 04:50.