加載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加載。