Javascript разделить HTML-контент

Я создаю программу для чтения ePub на IOS. В основном я использую uiwebview для загрузки файлов xhtml. Каждый раз, когда переворачивается страница, мне нужно загрузить файл с помощью uiwebview, а затем вызвать javascript для прокрутки до нужного смещения. Вот проблема: некоторые файлы xhtml большие (например,> 2 МБ), поэтому загрузка занимает слишком много времени. Поэтому анимация перелистывания страниц не такая плавная. Итак, я думаю, что могу загрузить xhtml один раз с помощью uiwebviewA , и каждый раз, когда страница переворачивается, я создаю еще один uiwebviewB и получаю необходимый html-контент (например, вторую страницу) из uiwebviewA. Таким образом, я мог ограничить html небольшим размером, а анимация перелистывания страниц должна быть плавной. Мой вопрос в том, что есть ли какая-либо библиотека javascript с открытым исходным кодом, которая может выполнить эту работу? Любые комментарии приветствуются!!


person user418751    schedule 25.01.2013    source источник
comment
jQuery Mobile отлично справляется с вашей проблемой, он использует один файл HTML с несколькими определенными в нем страницами, так что попробуйте: JQM   -  person Nikola Ninkovic    schedule 25.01.2013
comment
Что такое страница Трудно определить, что помещается на странице. Различные шрифты, размеры, изображения, макет, интервалы, содержание и т. д.   -  person epascarello    schedule 25.01.2013
comment
Я использую -webkit-columns для форматирования содержимого html в столбцы, поэтому страница означает столбец   -  person user418751    schedule 25.01.2013
comment
@NikolaNinkovic Спасибо, я проверю.   -  person user418751    schedule 25.01.2013
comment
Да, я подумал, что вы используете столбцы, но вы упускаете суть. Эти столбцы вычисляются в браузере вместе с содержимым. Как узнать, сколько данных необходимо, чтобы заполнить этот столбец этим запросом? [Я написал читалку, я знаю проблемы]   -  person epascarello    schedule 25.01.2013
comment
@torazaburo нет, этот вопрос пытается найти решение с помощью Javascript. Есть ли у вас какие-либо мысли по этому вопросу?   -  person user418751    schedule 25.01.2013
comment
@epascarello да, ты абсолютно прав. Я не знаю, как разделить html-контент, поэтому я задаю этот вопрос. Поскольку вы уже написали ридер, можете ли вы дать мне какое-нибудь предложение?   -  person user418751    schedule 25.01.2013
comment
Невозможно получить точные страницы. Вам нужно написать бэкенд, чтобы дать вам куски и предварительно загрузить их.   -  person epascarello    schedule 25.01.2013
comment
@epascarello, что вы подразумеваете под бэкэндом? вы имеете в виду физический файл? разрезать физический файл на мелкие части?   -  person user418751    schedule 25.01.2013
comment
бэкэнд, также известный как php/cgi/java/c#, или вы можете вручную разрезать его.   -  person epascarello    schedule 25.01.2013
comment
@epascarello для чтения электронных книг, таких как iBooks, у santaz нет такого бэкэнда, но они без проблем запускают ePub. Я думаю, что должны быть какие-то хитрости, чтобы разрезать большие файлы на маленькие кусочки. Я думаю, что должно быть два способа сокращения. (1) Физически разрезать файл на мелкие кусочки. (2) Получите Dom с помощью js, чтобы получить необходимый HTML-контент. Оба они требуют хорошо разработанной библиотеки для резки. Какой путь вы выбрали? А как резать?   -  person user418751    schedule 25.01.2013
comment
iBooks не является HTML-приложением. Это родное приложение для iPhone, поэтому оно лучше контролируется. Дело в том, что вы не можете просто взять файл с сервера и не нужно как-то загружать его в память, чтобы понять, как его разбить. Поскольку вы используете CSS для разбиения по страницам, вы практически не можете знать, где должны быть извлечены разделы страницы. Вы можете сделать что-то со специальной точкой останова в разметке, которую можно разделить с помощью регулярного выражения.   -  person epascarello    schedule 25.01.2013


Ответы (2)


Не существует осмысленного, четко определенного способа разделить HTML-документ так, как вы, кажется, описываете. Вы путаете две очень разные вещи: (1) разделение рендеринга на фрагменты размером со страницу и (2) разделение исходного кода HTML. Иными словами, я не могу себе представить алгоритма, который разделил бы файл HTML на части так, чтобы последовательная композиция отображаемых частей была идентична визуализации исходного файла HTML. Другими словами, чтобы выяснить, как разделить HTML, если предположить, что это вообще возможно, вам придется проделать большую часть или всю работу, связанную с рендерингом страницы, что сведет на нет всю цель.

Вы должны отказаться от идеи разделения HTML. Все читатели электронных книг разбивают страницы, по сути, один раз отображая весь HTML-документ, затем «окно», «вырезку» и «смещение» или, в некоторых случаях, используя области CSS.

Есть несколько альтернатив, которые я могу придумать, если я понимаю, что вы пытаетесь сделать.

  1. Уменьшите размер входных HTML-файлов, предварительно разбив их на части в начале рабочего процесса. Например, в одном известном мне проекте исходные (X)HTML-файлы имеют фрагменты дополнительной разметки, которые сообщают препроцессору, где при желании разделить их на отдельные файлы, что в данном случае является обходным путем для читателей электронных книг, которые не не учитывают свойства CSS page-break-* должным образом.

  2. Предварительно вычислите визуализацию следующей страницы в виде графики и используйте ее для перелистывания страниц.

  3. Как уже говорилось, переосмыслите свою архитектуру перезагрузки всего HTML-документа для каждой страницы вашей книги. Если это просто эффекты перелистывания страниц, которые заставляют вас хотеть сделать это, то откажитесь от них.

  4. Учтите, что многие программы для чтения электронных книг предоставляют режим прокрутки, не требующий разбивки на страницы, а некоторые (например, Himawari Reader) предоставляют только режим прокрутки, который некоторые читатели предпочитают. Вы можете выложить свою версию с прокруткой, а затем сделать пагинацию в версии 2.

person Community    schedule 26.01.2013
comment
Знаете ли вы какую-либо программу для чтения с открытым исходным кодом, которая обеспечивает режим прокрутки? Это было бы полезно для меня и сэкономило бы мое время. Заранее спасибо! - person user418751; 29.01.2013

Вы должны действительно проверить это:

http://cubiq.org/swipeview

И эта демонстрация, которая делает именно то, что вы просили:

http://cubiq.org/dropbox/SwipeView/demo/ereader/

Он берет текст (книгу) и разбивает текст на страницы, чтобы он соответствовал размеру экрана.

Я протестировал демо-версию на Android и iOS, и она отлично работает!

person Juan Fco. Roco    schedule 03.06.2013