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

1
Админ
Постов: 162
2
Элита
Постов: 45
3
VIP
Постов: 35
4
Проверенные
Постов: 31
5
Проверенные
Постов: 30
6
Пользователи
Постов: 27
7
VIP
Постов: 26
8
Пользователи
Постов: 24

  • Страница 1 из 1
  • 1
Универсальный подгружатель страниц (AJAX Load More)
Дата: Понедельник, 05.01.2026, 06:00 | Сообщение # 1 | | Написал: Узнаваемый
Автор темы
Мурчанн не в сети
        Сообщений:162
         Регистрация: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 | | Написал: Узнаваемый
Автор темы
Мурчанн не в сети
        Сообщений:162
         Регистрация: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 | | Написал: Узнаваемый
Автор темы
Мурчанн не в сети
        Сообщений:162
         Регистрация:20.10.2016

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

Мурчанн

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