前端實現網路小說閱讀器

2022-02-21 22:54:26 字數 2754 閱讀 1962

昨天晚上在群裡交流各種腦動大開的題目,我順手也提了乙個問題: js如何做「字元分頁「

原意是源於我4年前公司專案,我負責開發1年的樣子,後來各種原因就沒有然後了…

以上是手機上的截圖,metro風格當前可是風靡一時,軟體本身是類似現在的」追書神器」

通過書名,在網路上搜尋到對應的內容,之後儲存到本地資料庫。在通過js獲取資料再處理

只翻到舊版的**,預覽效果

程式採用phonegap打包的,資料採集是用底層完成的,其餘的都是通過前端處理

規定:採集到一本書內容,按照書的章節分資料塊,寫入到本地資料庫中,資料庫可以用sqlite,webkit是支援的

前端層面需要處理的幾個重要問題:

由於時間太久了,我也沒仔細去查閱**了,這裡只能憑記憶描述下

原理:

要實現類似於圖書的效果,首先要進行的,就是分頁操作。也就是說,需要把一段長長的文字,分解成若干個頁面。

分頁背景知識:

表面上來看,分頁操作並不複雜,但實際上分頁是非常複雜的功能,這個想靠js去計算文字占用的空間,難,非常難

現在站在我的理解層次簡單描述下:

純文字:

純文字是最簡單的情況。純文字的高度是固定的,因此,只要能計算出每一行的高度,就可以進行分頁。但是,中文排版也不是一件簡單的事情,因為中文的標點是很有講究的:

html格式:

對於html格式,情況就複雜很多,因此此時行距不固定了,段前、段後間距可能是任意值,而且每行的文字的字型、字型大小都有可能不一樣,這樣,計算每一行的高度,就要考慮到種種細微的因素。

如果中間再有影象,情況就會進一步複雜。影象的高度,影象和文字的邊距等等。

伺服器計算:

如果在伺服器裡面,提前計算好分頁呢?也有問題, 因為要適合不同的手機解析度,軟體本身還可以設定字型的大小,等等

因此:總結:通過純理論去計算分頁,和自己寫乙個文字排版軟體區別已經不大了,這絕不是短期的工作能夠完成的。況且我也寫不出~

html對分頁的支援

html並不直接支援分頁。

adobe正在建議乙個新的css樣式,稱為css region(

如果這個功能開發成功,就能實現類似於排版軟體的排版效果。據說這個功能在新的chrome測試版中正在開發中,但何時能投入使用並穩定執行,還是未知數。

html5新增加了乙個功能,就是分欄(columns)。分欄功能可以製作類似於word中的分欄效果

html5的分欄效果以及css**

分欄雖然不如css region那樣靈活,但勉強也能夠在不同的欄之間,實現文字的拆分。如果我們把每個欄設定成剛好一頁的話,就初步模擬了分頁的效果

分欄功能的效能及動態結構

雖然分欄功能初步能夠模擬分頁效果,但還存在著不少問題:

分欄形成的頁面,是連續排列的。也就是說,可以支援滑動操作,但並不能支援「翻頁」效果。

如果欄目過多時,效能會很差。(大約20~30個欄目會有明顯效能下降)

我們先討論第2個問題,就是如何動態切換分欄中的內容。

由於分欄存在效能問題,因此,我們不可能把很長的內容,全部用分欄排列(請注意,這是我們後面進行了複雜設計的原因。如果分欄沒有效能問題,自然也不需要那麼複雜的設計)。

由於效能問題,我們不能把所有需要的內容,全部放在分欄結構中,只能一段一段地顯示在欄目中。也就是說,用於構建分欄的段落,是動態變化的

在這種情況下,對於分頁的方式而言,最大的問題,是前面的段落,會影響後面的段落的排列。

考慮如下圖所示的情況。

圖中兩個段落在分欄狀態下排列

圖中,藍色段落充滿了乙個欄後,會擠出一些內容到下一欄。而綠色段落,會從藍色段落結束的地方繼續排列。

現在假設動態切換時,藍色段落被刪除,而在綠色段落後面,增加了紅色段落。此時,不能讓綠色段落從欄首開始排列,必須在綠色段落的開始,給出乙個空白的間隔出來,

如圖所示。

圖中紅色段落的排版

也就是說,雖然藍色段落被刪除,但是其對分欄排版的影響,仍然需要計算在內。就上圖來說,第1個欄可以完全忽略,因為不影響後面的排版。第2欄的上半部分,也就是藍色段落的「剩餘影響」,在排版仍然要考慮在內。

如何計算每個段落對後面的段落的「剩餘影響」呢?幸好在分欄模式下,提供了獲取每個段落的高度的功能,就是用zepto的height()函式就可以獲取高度。獲取了高度之後,除以欄目高度的餘數,就是「剩餘影響」。

因此,精確地計算出每個段落的高度,就可以實現動態的分欄排版。

以上就是基於對分欄實現排版的理論,之後涉及

等等這些知識點,有空再寫吧!

前端實現網路小說閱讀器

昨天晚上在群裡交流各種腦動大開的題目,我順手也提了乙個問題 js如何做 字元分頁 原意是源於我4年前公司專案,我負責開發1年的樣子,後來各種原因就沒有然後了 以上是手機上的截圖,metro風格當前可是風靡一時,軟體本身是類似現在的 追書神器 通過書名,在網路上搜尋到對應的內容,之後儲存到本地資料庫。...

用python實現自己的小說閱讀器

於是乎,自己動手豐衣足食,接下來就讓我們實現自己的 閱讀器吧。語音合成選擇建立語音合成應用獲取 內容 內容的獲取我們從筆趣閣 上獲取,一方面免費,另一方面沒有反爬,找到 首頁使用requests 就可以了。簡單分析一下頁面 所有章節資訊都在dd元素下,而且鏈結也是很有規律的,直接用xpath獲取所有...

多功能英文小說閱讀器

上篇說到的英文 閱讀器,模擬國外小開本 用其它的瀏覽器很難找到合適的字型,就像我們平常瀏覽網頁時,字型雖清晰但總覺得不夠漂亮。用蘋果瀏覽器不但美觀 顯示出來的字型和 中幾乎一模一樣 而且還支援本地檔案 不用上網 執行速度極快。還是用圖例說明 圖1 選擇檔案,用選單開啟一篇 這裡只有一種字型 roma...