Список пользователей

1
Админ
Постов: 288
2
VIP
Постов: 75
3
Элита
Постов: 62
4
Проверенные
Постов: 46
5
Проверенные
Постов: 45
6
Проверенные
Постов: 39
7
VIP
Постов: 36
8
VIP
Постов: 35

  • Страница 1 из 1
  • 1
Универсальный подгружатель страниц (AJAX Load More)
Дата: Понедельник, 05.01.2026, 06:00 | Сообщение # 1 | | Написал: Известный
Автор темы
Мурчанн не в сети
        Сообщений:288
         Регистрация:20.10.2016
За уважение окружающих За уважение окружающих За хорошее поведение За преданность форуму За любовь народа

Этот скрипт предназначен для динамической подгрузки материалов на страницах с пагинацией.

Он работает везде, где на странице есть:

1. контейнер с материалами: #ajaxBody

2. скрытый контейнер с пагинацией: #selector

Скрипт позволяет пользователю подгружать новые материалы кнопкой, без перезагрузки страницы, и автоматически обновляет состояние пагинации.



Основные функции скрипта

Инициализация

Код
const selector = $("#selector");
const bodyBox = $("#ajaxBody");

if (!bodyBox.length) return;
if (!selector.text().includes("»")) return;


Проверяет, есть ли контейнер с материалами (#ajaxBody) и кнопка "следующая страница" (») в пагинации (#selector).

Если чего-то нет , скрипт не запускается ахах..

Создание кнопки подгрузки

Код
function addButton() {
    $("#nextCont").remove(); // убираем старую кнопку
    bodyBox.append(`<div id="nextCont"><div class="btn-load">Подгрузить материалы</div></div>`);
}

addButton(); // создаём первую кнопку


Функция addButton() создаёт кнопку под всеми материалами.

Сначала убирает старую кнопку (если она есть), чтобы избежать дублирования.

Обработка клика по кнопке

Код
$(document).on("click", "#nextCont .btn-load", function () {


Подключение через $(document).on() гарантирует работу даже после динамической подгрузки новых материалов.

Загрузка следующей страницы

Код
let nextLink = selector.find("a").last().attr("href");

// fallback для старого uCoz
if (!nextLink) {
    let onclick = selector.find(".swchItem:contains('»')").attr("onclick");
    if (!onclick) return $("#nextCont").fadeOut();

    let num = onclick.match(/\d+/);
    if (!num) return $("#nextCont").fadeOut();

    nextLink = "/load/0-" + num[0];
}


Скрипт сначала пытается найти ссылку на следующую страницу через .

Если ссылка отсутствует (старые версии uCoz) — используется fallback через onclick.

AJAX-запрос

Код
$.get(nextLink, function (data) {
    const newItems = $("#ajaxBody", data).children();

    if (!newItems.length) {
        $("#nextCont").fadeOut();
        return;
    }

    newItems.addClass("clearfix").css({ opacity: 0 });
    bodyBox.append(newItems);
    newItems.animate({ opacity: 1 }, 300);

    selector.html($("#selector", data).html());

    if (selector.text().includes("»")) {
        addButton();
        loading = false;
    } else {
        $("#nextCont").fadeOut();
    }
});


Загружает контент следующей страницы с помощью $.get().

1. Берёт только новые материалы внутри #ajaxBody и добавляет их в конец текущего контейнера.

2. Применяет класс clearfix и плавную анимацию появления (opacity).

3. Обновляет скрытую пагинацию (#selector) для корректной работы следующей подгрузки.

Если новых страниц больше нет , кнопка скрывается.

Стили кнопки

Скрипт использует стили кнопки в стиле ВКонтакте:

1. центрирование по ширине (text-align: center)

2. фиксированный размер и паддинги (padding: 3px 210px)

3. синий цвет, белый текст, лёгкая тень

4. hover эффект: цвет светлеет

5. верхний отступ можно менять через CSS-переменную --btn-margin-top

Пример:

Код
#nextCont {
    width: 100%;
    text-align: center;
    margin: var(--btn-margin-top, -5px) 0 0px 0;
    clear: both;
}

#nextCont .btn-load {
    display: inline-block;   
    padding: 3px 210px;
    font-size: 14px;
    cursor: pointer;
    border-radius: 0px;
    background: #4a76a8;
    color: #fff;
    font-weight: 500;
    box-shadow: 0 2px 4px rgba(0,0,0,0.15);
    transition: 0.2s;
}

#nextCont .btn-load:hover {
    background: #5b87b7;
}


Основные преимущества

Универсальность , работает на любой странице с #ajaxBody и #selector.

Поддержка старых версий uCoz через onclick fallback.

Динамическое добавление кнопки и плавная анимация материалов.

Стиль кнопки можно легко настраивать через CSS-переменные и классы.

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



Код
<!-- Основной контейнер с материалами -->
<div id="ajaxBody">
    $BODY$
</div>

<!-- Скрытая пагинация -->
<div id="selector" style="display:none;">
    $PAGE_SELECTOR$
</div>

<!-- Стили кнопки как ВКонтакте -->
<style>
#nextCont {
    width: 100%;             /* занимает всю ширину родителя */
    text-align: center;      /* центрируем кнопку */
    margin: var(--btn-margin-top, -5px) 0 0px 0; /* верхний отступ регулируется переменной */
    clear: both;             /* чтобы кнопка не висела рядом с float-блоками */
}

#nextCont .btn-load {
    display: inline-block;   
    padding: 3px 210px;       /* компактная, но не огромная */
    font-size: 14px;
    cursor: pointer;
    border-radius: 0px;      /* скруглённые углы как у ВК */
    background: #4a76a8;     /* фирменный синий ВК */
    color: #fff;             /* белый текст */
    font-weight: 500;
    box-shadow: 0 2px 4px rgba(0,0,0,0.15); /* лёгкая тень */
    transition: 0.2s;
}

#nextCont .btn-load:hover {
    background: #5b87b7;     /* светлее при наведении */
}

/* clearfix для материалов */
.clearfix::after {
    content: "";
    display: table;
    clear: both;
}
</style>

<script>
$(function () {

    const selector = $("#selector");
    const bodyBox = $("#ajaxBody");

    if (!bodyBox.length) return;
    if (!selector.text().includes("»")) return;

    // Создание кнопки под всеми материалами
    function addButton() {
        $("#nextCont").remove(); // убираем старую кнопку если есть
        bodyBox.append(`<div id="nextCont"><div class="btn-load">Подгрузить материалы</div></div>`);
    }

    addButton(); // создаём первую кнопку

    let loading = false;

    // Клик по кнопке
    $(document).on("click", "#nextCont .btn-load", function () {

        if (loading) return;
        loading = true;

        $("#nextCont").html('<img src="https://bro.usite.pro/img/load.gif">');

        // Ссылка на следующую страницу
        let nextLink = selector.find("a").last().attr("href");

        // fallback для старого uCoz (onclick)
        if (!nextLink) {
            let onclick = selector.find(".swchItem:contains('»')").attr("onclick");
            if (!onclick) return $("#nextCont").fadeOut();

            let num = onclick.match(/\d+/);
            if (!num) return $("#nextCont").fadeOut();

            nextLink = "/load/0-" + num[0];
        }

        $.get(nextLink, function (data) {

            // новые материалы
            const newItems = $("#ajaxBody", data).children();

            if (!newItems.length) {
                $("#nextCont").fadeOut();
                return;
            }

            // clearfix и анимация
            newItems.addClass("clearfix").css({ opacity: 0 });
            bodyBox.append(newItems);
            newItems.animate({ opacity: 1 }, 300);

            // обновляем пагинацию
            selector.html($("#selector", data).html());

            // создаём кнопку снова после всех материалов
            if (selector.text().includes("»")) {
                addButton();
                loading = false;
            } else {
                $("#nextCont").fadeOut();
            }
        });

    });

});
</script>



Демо сайт

Мурчанн

Признаюсь, не знаю почему, но глядя на звезды мне всегда хочется мечтать.
Дата: Воскресенье, 01.02.2026, 21:19 | Сообщение # 2 | | Написал: Известный
Автор темы
Мурчанн не в сети
        Сообщений:288
         Регистрация:20.10.2016
За уважение окружающих За уважение окружающих За хорошее поведение За преданность форуму За любовь народа

Это более безопасный вариант переключателя: он не вмешивается в логику других скриптов, при этом дизайн самого переключателя остаётся прежним.

Код
$(function () {
    const selector = $("#selector");
    const bodyBox = $("#ajaxBody");

    if (!bodyBox.length || !selector.length) return;
    if (!selector.text().includes("»")) return;

    let loading = false;

    // Создание кнопки под всеми материалами (мой оригинальный HTML)
    function addButton() {
        $("#nextCont").remove(); // убираем старую кнопку если есть
        bodyBox.append(`<div id="nextCont"><div class="btn-load">Подгрузить материалы</div></div>`);
    }

    addButton(); // создаём первую кнопку

    // Клик по кнопке
    $(document).on("click", "#nextCont .btn-load", function () {
        if (loading) return;
        loading = true;
        $("#nextCont").html('<img src="https://bro.usite.pro/img/load.gif">');

        let nextLink = selector.find("a").last().attr("href");

        // fallback для старого uCoz (onclick)
        if (!nextLink) {
            let onclick = selector.find(".swchItem:contains('»')").attr("onclick");
            if (!onclick) {
                $("#nextCont").fadeOut();
                loading = false;
                return;
            }
            let num = onclick.match(/\d+/);
            if (!num) {
                $("#nextCont").fadeOut();
                loading = false;
                return;
            }
            nextLink = "/load/0-" + num[0];
        }

        $.get(nextLink, function (data) {
            // Создаём объект из ответа
            const $response = $("<div>").html(data);

            // ────────────────────────────────────────────────
            // ЗАЩИТА: удаляем дублирующиеся блоки ДО вставки
            // ────────────────────────────────────────────────
            $response.find("#user-photos").remove();
            $response.find("#vkPhotosCount").remove();
            $response.find(".vk-photos-header").remove();
            $response.find(".vk-modern-post1").remove();     // если дублируется весь блок
            $response.find(".bro-actions").remove();         // твои кнопки действий

            // Очищенные новые материалы
            const newItems = $response.find("#ajaxBody").children();

            if (!newItems.length) {
                $("#nextCont").fadeOut();
                loading = false;
                return;
            }

            // clearfix и анимация
            newItems.addClass("clearfix").css({ opacity: 0 });
            bodyBox.append(newItems);
            newItems.animate({ opacity: 1 }, 300);

            // обновляем пагинацию
            selector.html($response.find("#selector").html());

            // создаём кнопку снова или скрываем
            if (selector.text().includes("»")) {
                addButton();
            } else {
                $("#nextCont").fadeOut();
            }

            loading = false;
        }).fail(function () {
            // если запрос упал — возвращаем кнопку
            $("#nextCont").html('<div class="btn-load">Подгрузить материалы</div>');
            loading = false;
        });
    });
});


Просто можете вставить

Код
<!-- Скрытая пагинация -->
<div id="selector" style="display:none;">
$PAGE_SELECTOR$
</div>

<script src="https://bro.usite.pro/js/ajaxfotonew.js"></script>

Мурчанн

Признаюсь, не знаю почему, но глядя на звезды мне всегда хочется мечтать.
Дата: Воскресенье, 01.02.2026, 21:23 | Сообщение # 3 | | Написал: Известный
Автор темы
Мурчанн не в сети
        Сообщений:288
         Регистрация:20.10.2016
За уважение окружающих За уважение окружающих За хорошее поведение За преданность форуму За любовь народа

Иногда скрипты начинают конфликтовать между собой по мере их накопления, поэтому приходится выстраивать защиту.

Мурчанн

Признаюсь, не знаю почему, но глядя на звезды мне всегда хочется мечтать.
  • Страница 1 из 1
  • 1
Поиск: