canvas教程

canvas 如何在保留 background 的情况下重置画布

字号+ 作者:H5之家 来源:H5之家 2017-03-19 13:10 我要评论( )

canvas 如何在保留 background 的情况下重置画布 分类:前端技术 | 标签:canvas、background | 发布时间:2014-02-16 00:00:00 前几天在用 canvas 实现动画的时候,因为是需要设置画图的背景,所以一开始想到的就是使用 canvas 的 drawImage() 方法: conte

canvas 如何在保留 background 的情况下重置画布

分类:前端技术 | 标签:canvas、background | 发布时间:2014-02-16 00:00:00

前几天在用 canvas 实现动画的时候,因为是需要设置画图的背景, 所以一开始想到的就是使用 canvas 的 drawImage() 方法:

context.drawImage(img, x, y, width, height);

但是后面发现了在此基础上画动画的话,假如通过:

context.clearRect(0, 0, width, height);

来重置画布的话,背景也被清除掉了,再次重画背景就先出现一闪一闪的问题, 并不是自己想要的结果。

查阅了相关资料:

HTML5 Canvas is a Non-Retained Drawing Mode Graphics API.

意思是说画布是一种类似油彩画的画图模式。就像现实世界中的油彩画一样, 当你使用 stroke() 或者 fill() 或者 drawImage() 的时候,其实就像油彩一样变为画布的一部分。例如,一个画家画了一个人, 你说让那个人移动或者变大,是不可能的,你不能改变它,也不能擦掉它。 当然你可以重新拿一张白纸重新开始画,就相当于调用clearRect()。

那么,应该如何解决这个问题呢?

  • 假如背景图片是静态的,那么就使用 css 对 canvas 的样式 background 属性进行设置。 例如我上面遇到的问题就是这种情况。

  • 假如背景是动态的,可以考虑使用 Retained Drawing Mode 的 SVG 或者 HTML。 使用这些元素,就可以改变背景的位置或者大小。

     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • Canvas绘制地板

      Canvas绘制地板

      2017-03-19 16:01

    • 一个 web 页面上的多个 canvas

      一个 web 页面上的多个 canvas

      2017-03-19 10:02

    • 关于 Canvas 的兄弟 SVG 的基础教程

      关于 Canvas 的兄弟 SVG 的基础教程

      2017-03-18 17:02

    • 基于html5 canvas实现漫天飞雪效果实例

      基于html5 canvas实现漫天飞雪效果实例

      2017-03-18 17:00

    网友点评
    r