欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

如何使用雙緩存解決CanvasclearRect引起的閃屏問題-創(chuàng)新互聯(lián)

小編給大家分享一下如何使用雙緩存解決Canvas clearRect引起的閃屏問題,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

創(chuàng)新互聯(lián)公司十多年專注成都高端網(wǎng)站建設(shè)按需設(shè)計(jì)服務(wù),為客戶提供專業(yè)的成都網(wǎng)站制作,成都網(wǎng)頁設(shè)計(jì),成都網(wǎng)站設(shè)計(jì)服務(wù);創(chuàng)新互聯(lián)公司服務(wù)內(nèi)容包含成都網(wǎng)站建設(shè),成都小程序開發(fā),軟件開發(fā),網(wǎng)絡(luò)營銷推廣,網(wǎng)絡(luò)運(yùn)營服務(wù)及企業(yè)形象設(shè)計(jì);創(chuàng)新互聯(lián)公司擁有眾多專業(yè)的高端網(wǎng)站制作開發(fā)團(tuán)隊(duì),資深的高端網(wǎng)頁設(shè)計(jì)團(tuán)隊(duì)及經(jīng)驗(yàn)豐富的架構(gòu)師高端網(wǎng)站策劃團(tuán)隊(duì);我們始終堅(jiān)持從客戶的角度出發(fā),為客戶量身訂造網(wǎng)絡(luò)營銷方案,解決網(wǎng)絡(luò)營銷疑問。

用 canvas 做 H5 的時(shí)候遇到了閃屏問題。閃爍效果如下圖:


如何使用雙緩存解決Canvas clearRect引起的閃屏問題

問題簡介

功能簡介

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

因?yàn)楣δ芎唵?,所以用了原?canvas 實(shí)現(xiàn)這個(gè)功能。但在使用clearRect 清除畫布的時(shí)候會(huì)出現(xiàn)閃爍的情況。

代碼實(shí)現(xiàn)(問題代碼)

以下代碼即為出現(xiàn)閃屏的關(guān)鍵代碼,省略了圖片的定義與 onload:

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

問題分析

經(jīng)過簡單分析,得出閃屏的原因是clearRect 清除畫布后,繪制的時(shí)間較長導(dǎo)致出現(xiàn)閃屏的現(xiàn)象。

什么是雙緩存

來看一下microsoft 網(wǎng)站中雙緩沖圖形 這篇文章對(duì)雙緩存的解釋:

對(duì)圖形進(jìn)行編程時(shí)出現(xiàn)閃爍是一個(gè)常見問題。 需要多個(gè)復(fù)雜畫圖操作的圖形操作可導(dǎo)致呈現(xiàn)的圖像出現(xiàn)閃爍或具有不可接受的外觀。 為解決這些問題,.NET Framework 提供了雙緩沖功能。

雙緩沖使用內(nèi)容緩沖來解決與多個(gè)畫圖操作相關(guān)的閃爍問題。 啟用雙緩沖后,所有畫圖操作會(huì)首先呈現(xiàn)到內(nèi)存緩沖而不是屏幕上的繪圖圖面。 所有畫圖操作完成后,內(nèi)存緩沖會(huì)直接復(fù)制到與之關(guān)聯(lián)的繪圖圖面。 由于屏幕上僅執(zhí)行一個(gè)圖形操作,因此與復(fù)雜畫圖操作相關(guān)的圖像閃爍可得以消除。

使用雙緩存解決問題

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

代碼實(shí)現(xiàn)

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

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

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

效果驗(yàn)收

可以很明顯的看到閃屏問題解決了!

如何使用雙緩存解決Canvas clearRect引起的閃屏問題

總結(jié)

重繪畫布的時(shí)候,我們需要使用clearRect 來清空畫布,此時(shí)的畫布是空的,開始重繪后,如果內(nèi)容較多,時(shí)間也就相應(yīng)的增加,因此視覺出現(xiàn)了空檔期,我們就看到了閃屏的情況;

解決閃屏,其實(shí)就是怎么解決繪制時(shí)間較長的問題;

這里參考了圖形圖象處理編程中雙緩存 的概念,將繪制過程交給了緩存 canvas ,這樣頁面中的 canvas 就省去了繪制過程,而緩存 canvas 并沒有添加到頁面,所以我們就看不到繪制過程,也就解決了閃屏的問題。

以上是“如何使用雙緩存解決Canvas clearRect引起的閃屏問題”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

網(wǎng)頁題目:如何使用雙緩存解決CanvasclearRect引起的閃屏問題-創(chuàng)新互聯(lián)
文章網(wǎng)址:http://chinadenli.net/article28/ehojp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊、企業(yè)網(wǎng)站制作Google、定制開發(fā)、商城網(wǎng)站網(wǎng)站營銷

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作
四十女人口红哪个色好看| 亚洲成人黄色一级大片| 亚洲国产精品一区二区| 欧美黑人巨大一区二区三区| 精品一区二区三区乱码中文| 91欧美亚洲精品在线观看| 狠狠做五月深爱婷婷综合| 福利在线午夜绝顶三级| 91欧美亚洲精品在线观看| 亚洲欧美日韩国产综合在线| 国产中文字幕一区二区| 99热九九在线中文字幕| 人人爽夜夜爽夜夜爽精品视频 | 国产精品一区二区视频大全| 99福利一区二区视频| 国产又大又黄又粗的黄色| 亚洲欧美一二区日韩高清在线| 青青操成人免费在线视频| 日本一本在线免费福利| 青草草在线视频免费视频| 国产日韩中文视频一区| 欧美丰满人妻少妇精品| 国产传媒一区二区三区| 欧美日韩国产综合特黄| 亚洲视频一级二级三级| 中文字幕av诱惑一区二区| 久久综合亚洲精品蜜桃| 中文字幕亚洲在线一区| 国产亚洲二区精品美女久久| 大香蕉再在线大香蕉再在线| 日本一本在线免费福利| 在线免费国产一区二区| 熟女白浆精品一区二区| 狠狠干狠狠操亚洲综合| 国产av一区二区三区四区五区| 久久热麻豆国产精品视频| 欧美综合色婷婷欧美激情| 好吊视频一区二区在线| 正在播放国产又粗又长| 亚洲精品中文字幕一二三| 人妻少妇系列中文字幕|