码迷,mamicode.com
首页 > Web开发 > 详细

关于html5之canvas的那些事

时间:2016-04-21 06:56:27      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:

  • 何为canvas

<canvas> 标签只是图形容器,您必须使用脚本来绘制图形。默认情况下该矩形区域宽为300像素,高为150像素,设置宽高必须在canvas标签内部,不能加单位px。

大多数 Canvas 绘图 API 都没有定义在 <canvas> 元素本身上,而是定义在通过画布的 getContext() 方法获得的一个“绘图环境”对象上。

注意:样式中的宽高是对画布等比例缩放,画布的内容也相应的缩放

  • 绘制路径

moveTo(x, y)方法设置线段的起点,lineTo(x, y)方法设置线段的终点,stroke()方法用来给透明的线段着色。 默认是黑色。beginPath()重置路径,closePath()创建从当前点到起始点的路径

现在用路径画一个矩形

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <style>
        canvas {
            border: 1px solid black;
            width: 1000px;
        }
    </style>
</head>
<body>
<canvas id="cvs" width="1000" height="500"  ></canvas>
<script>
    var cvs = document.getElementById(‘cvs‘); // 获取Canvas标签
    // 绘制2d图形,要传递2d作为参数
    // 绘制3d图形,要传递webgl作为参数
    var ctx = cvs.getContext(‘2d‘);

    //这里使用的是矩形函数的封装
    function strokeRect(ctx, x, y, w, h) {
//        ctx.beginPath();
        ctx.moveTo(x, y);
        ctx.lineTo(x + w, y);
        ctx.lineTo(x + w, y + h);
        ctx.lineTo(x, y + h);
        ctx.lineTo(x, y);  
        ctx.stroke();
    }
    
    strokeRect(ctx,100,100,150,150);//在画布中绘制一个起点位置在(100,100),宽高各为150px的矩形
    

</script>
</body>
</html>
  • canvas常见的一些方法和属性

绘制矩形:

rect(x,y,w,h)

fillRect(x,y,w,h)绘制被填充的矩形 默认黑色 自己不渲染,需使用fill()或stroke()

strokeRect(x,y,w,h)绘制带边框的矩形 默认黑色 自己不渲染,需使用fill()或stroke()

设置属性:

fillStyle:填充颜色(注意顺序)

strokeStyle:线条颜色

lineWidth:线宽

lineJoin:边界样式

lineCap:端点样式

  • canvas设置文本

配合css一起使用

fillText(string, x, y) 用来绘制文本,它的三个参数分别为文本内容、起点的x坐标、y坐标
与此类似的还有strokeText方法,用来添加空心字。
fillText方法不支持文本断行,即所有文本出现在一行内。所以,如果要生成多行文本,只有调用多次fillText方法。

  • canvas简单动画的封装

不封装做个demo

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <style>
        canvas {
            border: 1px solid black;
        }
    </style>
</head>
<body>
<canvas id="cvs" width="1000" height="500"></canvas>
<script>
    var cvs = document.getElementById(‘cvs‘);
   
    var ctx = cvs.getContext(‘2d‘);

    ctx.fillRect(50,50,50,50);
    var num = 0;
    setInterval(function(){
        num++;
        ctx.clearRect(0,0,1000,500);
        ctx.fillRect(num,num,50,50);
    },25)
    
</script>
</body>
</html>

以框架形式封装呈现:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <style>
        canvas {
            border: 1px solid black;
        }
    </style>
</head>
<body>
<canvas id="cvs" width="1000" height="500"></canvas>
<script>
    var cvs = document.getElementById(‘cvs‘);
    var ctx = cvs.getContext(‘2d‘);
    // 矩形绘制函数的封装
    function strokeRect(ctx, x, y, w, h) {
        ctx.beginPath();
        ctx.moveTo(x, y);
        ctx.lineTo(x + w, y);
        ctx.lineTo(x + w, y + h);
        ctx.lineTo(x, y + h);
        ctx.lineTo(x, y);
        ctx.stroke();
    }
    //构造函数
    function Rect(ctx, x, y, w, h) {
        this.ctx = ctx;
        this.x = x;
        this.y = y;
        this.w = w;
        this.h = h;
    }
    //构造函数的原型对象添加方法
    Rect.prototype.draw = function(){
        strokeRect(this.ctx,this.x,this.y,this.w,this.h);
    };

    var rect = new Rect(ctx,50,50,50,50);

    var displayObjects = [];
    displayObjects.push(rect);

    setInterval(function(){
        ctx.clearRect(0,0,1000,500);//在每次执行定时器时清除整个画布
        rect.x = rect.x+1;

        displayObjects.forEach(function(displayObject){
            displayObject.draw();
        })
    },25)

</script>
</body>
</html>


未完待续!!!

 

关于html5之canvas的那些事

标签:

原文地址:http://www.cnblogs.com/goweb/p/5415186.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!