Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Пагинация страниц (https://javascript.ru/forum/events/84834-paginaciya-stranic.html)

voraa 11.01.2023 11:41

Цитата:

Сообщение от ureech
С обрезанием строк думаю решить путём расчёта высоты строки. Насчёт ресайза пока не понял).

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

ureech 12.01.2023 20:44

К сожалению вариант voraa, мне не подходит. У меня другая логика. На данный момент стоит такой вопрос. В моём тексте, например 40 отрезков <p>...</p>. При подсчёте среднего числа кнопок для этого текста получаю, например 4 кнопки. Подсчёт вёлся с округлением в большую сторону. Все <p>...</p> разного размера, поэтому выводить по 10 не вариант. Нужно выводить те, что в видимой области окна. +- пару строк роли не играют. Можно будет прокрутить.
str = $(str).filter("p");
count= str.length // общее количество тегов <p>...</p>
clientCount = Math.ceil($(window).height()/count);// среднее количество в окне
count_button = Math.ceil($(document).height()/count)/clientCount; // количество кнопок
/** перебираю теги **/
 
 for (var i = 0; i < str.length; i++) {  
 ???
   }


Как я рассуждаю. При переборе тегов мне нужно получить количество тегов в видимой области окна. То есть заполнять $(window).height() тегами. Предварительно получая количество строк в теге и вычисляя их ширину. Осталось изобразить всё это на "бумаге"). Как всё сделать по отдельности ещё представляю, но вот в кучу собрать...)

voraa 12.01.2023 21:58

А ширина и высота области, в которой показывается страница фиксирована?
Напрашивается такое решение.
Делаете div со стилями
{
      width: 400px; /* подставить ширину своей области*/
      position: absolute;
       visibility: hidden;
}

Запихиваете в него свой текст в innerHTML
Потом пробегаетесь по параграфам в этом div и берете их offsetTop и offsetTop+offsetHeigth.
Это уже поможет вычислить какие параграфы к какой странице относятся.
Далее просто в свою основную область выводите нужные параграфы.

ureech 13.01.2023 09:24

На данный момент размеры не фиксированные. Изначально не хотелось возиться с размерами). Придётся под устройства подгонять и тп.Но если не выкручусь видимо придётся к этому вернуться.

voraa 13.01.2023 10:15

Цитата:

Сообщение от ureech
На данный момент размеры не фиксированные

Тогда отслеживать resize и пересчитывать.

voraa 13.01.2023 19:51

Чего то попробовал сделать (самому интересно стало, вдруг пригодится когда)
Файл большой, код сюда не вмещается
Даю ссылку на Гугл диск

Основная идея - Делаем невидимое окно, размерами такое же, как область просмотра. В него загружаем текст. И в нем по размерам считаем, какие параграфы помещаются на страницу.

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

Что смог прокомментарил, что бы понятнее было

рони 13.01.2023 19:59

voraa,
:thanks:

ureech 23.01.2023 10:22

voraa,
Вот только вернулся к данной теме. Изменился приоритет задач. Перекинули на другое. Сейчас буду что то пробовать. Отпишусь, в любом случае

ureech 24.01.2023 10:44

voraa,
просмотрел ваш пример. Как я понял вы водите блоки по тегу <p>. А если в теге всего одно предложение)?
У меня такая ситуация. Я разделил текст по тегам, но в теге разное количество текста. И в одном clientHeight 5.8 тегов помещается, а в другом 8.2). К тому же с переносами строк тоже не ахти как. Вот не знаю как это решить лучше. То ли блоки из тегов составлять, то ли изначально считать символы в строке то ли...?

voraa 24.01.2023 10:49

Цитата:

Сообщение от ureech
Как я понял вы водите блоки по тегу <p>

Ну так вы об этом вначале писали.
Цитата:

Сообщение от ureech
А если в теге всего одно предложение)?

Какая разница сколько. В тексте есть понятие - параграф. А что там, сколько предложений - не важно.
Цитата:

Сообщение от ureech
И в одном clientHeight 5.8 тегов помещается, а в другом 8.2).

Не понял
Цитата:

Сообщение от ureech
К тому же с переносами строк тоже не ахти как.

Что не так?


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