動態尺寸加載libpag文件白邊問題解決方案

  加載pag文件時,最理想的情況是canvas的寬高和pag資源文件的寬高一致,或比例一致。否則就會出現四周白邊(頁面底色),除非是按平鋪的樣式進行設置(源碼暫未找到對應方法)。

  而對於頁面寬高不定的情況下,就無法保證pag文件能適配頁面,如果pag文件底色和父級頁面底色不一致,就會表現出來(所以底色改成一致也算是一種解決方案)。

  那麼在頁面寬高不定(寬高不寫死)的情況下,如果想達到內容填滿的情況(不拉伸),就需要對canvas進行補全,示例代碼:

 1 drawPag: async function() {
 2         $("#pag").css('width','100%')
 3         $("#pag").css('height','100%')
 4         const canvas = document.getElementById('pag');
 5         // pgFile.setContentSize($("#pag").width(),$("#pag").height())左上角開始計算,導致多餘部分被剪切
 6         // 計算寬度比1920和高度比1080,取較大值,然後等比例放大另一邊,以達到始終能填滿
 7         const _w = $("#pag").width()
 8         const _h = $("#pag").height()
 9         if (_w/1920 > _h/1080) {
10             // pgFile.setContentSize(_w, 1080 * _w/1920)
11             $("#pag").height(1080 * _w/1920)
12         } else {
13             // pgFile.setContentSize(1920 * _h/1080, _h)
14             $("#pag").width(1920 * _h/1080)
15         }
16         // pgFile.setContentSize(1920,1080)
17         canvas.width = pgFile.width();
18         canvas.height = pgFile.height();
19 
20         const pgView = await PG.PAGView.init(pgFile, canvas);
21         pgView.setRepeatCount(Infinity)
22         await pgView.play();
23     }

 主要邏輯:

1. 設爲動態樣式,以實現加載後修改頁面尺寸再次重新計算時仍是動態尺寸的目的,方便下次調用;

2. 獲取寬高,與標準寬高比較,比例大者爲標準尺寸,將另一邊按比例進行放大;

3. canvas內pag文件全屏(正常處理過程,與動態計算無關),init加載。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章