本篇内容主要讲解“在Canvas clearRect中引起的闪屏如何解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“在Canvas clearRect中引起的闪屏如何解决”吧!

问题简介

功能简介

H5 该部分的功能为:通过点击二级菜单,切换图片的遮罩或者更换背景。

因为功能简单,所以用了原生 canvas 实现这个功能。但在使用 clearRect 清除画布的时候会出现闪烁的情况。

代码实现(问题代码)

以下代码即为出现闪屏的关键代码,省略了图片的定义与 onload:

//点击二级菜单后,触发该函数更新画布updateCanvas(){constcanvas=document.getElementById('canvas');//获取画布constctx=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(){constcanvas=document.getElementById('canvas');//获取页面中的canvasconstctx=canvas.getContext('2d');consttempCanvas=document.createElement('canvas');//新建一个canvas作为缓存canvasconsttempCtx=tempCanvas.getContext('2d');tempCanvas.width=1448;tempCanvas.height=750;//设置宽高//开始绘制tempCtx.drawImage(bg,0,0);//背景...//省略其他绘制过程//缓存canvas绘制完成ctx.clearRect(0,0,1448,750);//清空旧canvasctx.drawImage(tempCanvas,0,0);//将缓存canvas复制到旧的canvas}

到此,相信大家对“在Canvas clearRect中引起的闪屏如何解决”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!