91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

在Canvas clearRect中引起的閃屏如何解決

發布時間:2022-02-23 15:40:32 來源:億速云 閱讀:327 作者:iii 欄目:開發技術

本篇內容主要講解“在Canvas clearRect中引起的閃屏如何解決”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“在Canvas clearRect中引起的閃屏如何解決”吧!

問題簡介

功能簡介

H5 該部分的功能為:通過點擊二級菜單,切換圖片的遮罩或者更換背景。

因為功能簡單,所以用了原生 canvas 實現這個功能。但在使用 clearRect 清除畫布的時候會出現閃爍的情況。

代碼實現(問題代碼)

以下代碼即為出現閃屏的關鍵代碼,省略了圖片的定義與 onload:

// 點擊二級菜單后,觸發該函數更新畫布
updateCanvas(){
    const canvas = document.getElementById('canvas'); // 獲取畫布
    const ctx = canvas.getContext('2d');
    ctx.clearRect(0,0,1448,750); // 清空畫布
    // 開始重繪
    ctx.drawImage(bg,0,0); // 背景
    ... // 省略其他繪制過程
}

問題分析

經過簡單分析,得出閃屏的原因是 clearRect 清除畫布后,繪制的時間較長導致出現閃屏的現象。

什么是雙緩存

來看一下microsoft 網站中雙緩沖圖形 這篇文章對雙緩存的解釋:

對圖形進行編程時出現閃爍是一個常見問題。 需要多個復雜畫圖操作的圖形操作可導致呈現的圖像出現閃爍或具有不可接受的外觀。 為解決這些問題,.NET Framework 提供了雙緩沖功能。

雙緩沖使用內容緩沖來解決與多個畫圖操作相關的閃爍問題。 啟用雙緩沖后,所有畫圖操作會首先呈現到內存緩沖而不是屏幕上的繪圖圖面。 所有畫圖操作完成后,內存緩沖會直接復制到與之關聯的繪圖圖面。 由于屏幕上僅執行一個圖形操作,因此與復雜畫圖操作相關的圖像閃爍可得以消除。

使用雙緩存解決問題

以上引用,簡單來說,主要問題就是繪制時間較長導致了閃屏,解決方法就是新建一個 canvas 作為 緩存 canvas ,通過 緩存 canvas 完成繪制過程,繪制完成后,直接將 緩存 canvas 復制到原來的 canvas,這樣就可以解決繪制時間過長導致的閃屏問題。

代碼實現

以下代碼即為關鍵代碼,省略了圖片的定義與 onload:

updateCanvas(){
    const canvas = document.getElementById('canvas'); // 獲取頁面中的 canvas
    const ctx = canvas.getContext('2d');
    
    const tempCanvas = document.createElement('canvas'); // 新建一個 canvas 作為緩存 canvas
    const tempCtx = tempCanvas.getContext('2d');
    tempCanvas.width = 1448; tempCanvas.height = 750; // 設置寬高

    // 開始繪制
    tempCtx.drawImage(bg,0,0); // 背景
    ... // 省略其他繪制過程
    
    // 緩存 canvas 繪制完成
    
    ctx.clearRect(0,0,1448,750); // 清空舊 canvas
    ctx.drawImage(tempCanvas,0,0); // 將緩存 canvas 復制到舊的 canvas
}

到此,相信大家對“在Canvas clearRect中引起的閃屏如何解決”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

崇义县| 西丰县| 资源县| 彝良县| 新安县| 贵港市| 新泰市| 华安县| 普陀区| 油尖旺区| 普宁市| 崇义县| 隆德县| 东山县| 山丹县| 桐城市| 云浮市| 吉木乃县| 宁阳县| 新乡县| 隆安县| 项城市| 定安县| 武义县| 上蔡县| 中山市| 黄石市| 茶陵县| 濮阳市| 海安县| 定州市| 尼勒克县| 马尔康县| 资阳市| 鄂伦春自治旗| 仪征市| 深水埗区| 衡东县| 务川| 上饶县| 榆中县|