html5 离屏canvas 的应用

10 篇文章 0 订阅

离屏canvas在大多数的情况下是应用到html5 游戏中,但是最近接触到的一个项目是运用到绘制大量的图形上。

譬如有以下的需求,在一个固定的背景图上面绘制一个动态的时间。拿到这个需求,大部分搞过html5 开发的肯定知道具体的步骤怎么做,下面我简单说一下:

1、先绘制背景。

2、将时间格式化绘制到背景上面。

3、清除canvas ,重复第一和第二步。

js文件如下:

$(document).ready(function() {

    var canvas = document.getElementById("canvas");
    canvas.width = 400;
    canvas.height = 400;
    var ctx = canvas.getContext("2d");
    setInterval(function(){
        ctx.clearRect(0,0,200,200);
        ctx.rect(0,0,400,400);
        ctx.fillStyle='blue';
        ctx.fill();
        var time = new Date().getTime();
        ctx.font='20pt Calibri';
        ctx.strokeStyle='red';
        ctx.strokeText(time,100,150);
    },1000);
});

这种方式应该是满足这个需求最好的方式。

实际上在大多数的情况下这中方式也是比较不错的选择,但这个时候有一个更加复杂的需求,要求背景是比较复杂的图形,并且是很多对象组合而成的,例如下面这个仪表盘:

                                                                                

这是一个使用html5 绘制仪表盘,需求改变为每秒从后台获取当前的数值,然后指示到当前数值,这个时候再使用上述方式可能就不是很合适了。并且仪表盘的实现不是很麻烦,当背景数据达到3000个对象或者更多(html5中的线条)的时候,再来使用上述的方式进行绘制就不是很合适了。这个时候离屏canvas就派上用场了。

针对最上面的需求修改后的js文件如下:

$(document).ready(function() {

    var canvas = document.getElementById("canvas");
    canvas.width = 400;
    canvas.height = 400;
    var ctx = canvas.getContext("2d");


    var  offCanvas = document.createElement("canvas");
    offCanvas.width=400;
    offCanvas.height=400;
    var offContext = offCanvas.getContext("2d");
    offContext.rect(0,0,400,400);
    offContext.fillStyle='blue';
    offContext.fill();
    setInterval(function(){
        ctx.clearRect(0,0,400,400);
        ctx.drawImage(offCanvas,0,0);
        var time = new Date().getTime();
        ctx.font='20pt Calibri';
        ctx.strokeStyle='red';
        ctx.strokeText(time,100,150);
    },1000);
});

上面文件步骤如下:

将静态数据绘制在离屏canvas上面,在当前的canvas上面绘制离屏canvas,在再将动态数据绘制在当前canvas上面,这样就能减少静态数据的绘制次数。


  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值