canvas

学习慕课网canvas倒计时实例笔记

2014-11-25  本文已影响419人  码农

视频地址:慕课·canvas小球倒计时
代码下载请移步:github
演示地址:在线演示

一、canvas简介

canvas是HTML5中新加入的标签,但是其真正的控制却大多需要javascript来控制。在标签内可以写一些不支持HTML5的浏览器的提示文字,不用担心如果浏览器支持HTML5则标签内的文本不会显示。
示例:

<canvas id="canvas" >
      您的浏览器不支持html5请使用现代浏览器。
</canvas>

提示:由于需要在javascript中获取该元素,所以需要给canvas设置id属性

二、canvas基础

在页面中声明canvas标签后就可以在javascript中获取并操作canvas画布啦。

<script type="text/javascript">
//页面默认调用函数      
window.onload=function(){
         //获取canvas标签元素
         var canvas=document.getElementById('canvas');

         //设置canvas宽、高
         canvas.width=500;
         canvas.height=500;    

        //获取2d上下文
        var context=canvas.getContext('2d');
 }
</script>

以上代码就是获取和初步设置cnavas属性的代码。在设置canvas的宽高时不建议添加单位,因为可以把canvas看作一张画布,设定宽、高时除了设定画布大小之外也需要设置画布的点密度,如果带单位时只能设置画布的大小,而如果不带单位除了设置画布大小外也同时设置了画布的点密度。
在获取到标签元素后如果要在画布中进行绘制还需要获取文件的上下文,可以获取2d、3d上下文,但是html5中推荐支持的是2d上下文,所以用2d上下文浏览器支持更好,而且大多数图形使用2d上下文已经够用。

三、canvas API简介

有了一张画布后我们就可以在画布上进行绘制啦。

/*----------- draw line 1 --------------*/
        context.beginPath();

        context.moveTo(100,100);
        context.lineTo(700,700);
        context.lineTo(100,700);
        context.lineTo(100,100);
        context.lineTo(700,700);

        context.lineWidth=5;
        context.strokeStyle="red";
        context.stroke();
        //context.fill();

        context.closePath();

API:

|函数|性质|意义|
| :---: | : ---: | :---: |
|beginPath()| 方法| 开始一段路径 |
|moveTo() | 方法 | 路径起始点 |
|lineTo() | 方法 | 路径终点 |
|lineWidth |属性 | 路径宽度 |
|strokeStyle|属性 | 路径颜色 |
|stroke() |方法 | 渲染路径 |
|fill() |方法 | 填充封闭路径 |
|closePath()|方法 | 结束一段路径 |

/*--------- draw rect-------------------*/
        context.beginPath();

        context.fillStyle='yellow';
        context.fillRect(10,10,10,10);
        
        context.strokeStyle="black";
        context.strokeRect(30,30,30,30);


        context.closePath();

渐变的色条其实也是一个矩形块,可以使用createLinearGradient(x1,y1,x2,y2)函数来设置渐变色带的渐变方向,x1,y1代表起点,x2,y2代表终点。可以使用addColorStop(0,'颜色值'),addColorStop(1,'颜色值')来设置起点颜色和终点颜色。然后用设定的样式填充一个矩形。

/*-------- draw linearGradient ---------*/
        var linear=context.createLinearGradient(0,0,50,300);

        linear.addColorStop(0,'red');
        linear.addColorStop(1,'green');

        context.fillStyle=linear;
        context.fillRect(10,10,200,200);

同样的绘制阴影也可以看作是在图形后面绘制一个其它矩形色块,代码如下。

/* ------ draw shandow -----------------*/
        context.beginPath();

        context.shadowOffsetX = 20; // 设置水平位移
        context.shadowOffsetY = -20; // 设置垂直位移
        context.shadowBlur = 6; // 设置模糊度
        context.shadowColor = "rgba(0,0,0,0.5)"; // 设置阴影颜色

        context.fillStyle = "#CC0000"; 
        context.fillRect(150,200,200,400);

        context.closePath();
/*----------- draw circly  -----------*/
        context.beginPath();

        context.lineWidth=5;
        context.strokeStyle="blue";

        context.arc(300,300,200,0,1.5*Math.PI,true);
        context.stroke();

        context.closePath();

如果要绘制原型将开始弧度、结束弧度分别设为0,2PI即可

* ----------- 实心圆 ---------------*/
        context.beginPath();

        context.fillStyle='red';
        context.arc(50,50,50,0,2*Math.PI,true);
        context.fill();

        context.closePath();
/*----------- 空心圆 ---------------*/
        context.beginPath();

        context.lineWidth=5;
        context.strokeStyle='red';
        context.arc(200,200,50,0,2*Math.PI,true);
        context.stroke();

        context.closePath();
/* -------  绘制文字 --------------*/
        context.beginPath();
        //设置字体
        context.font="Bold 20px Arial";
        //设置对齐方式
        context.textAlign="left";
        context.lineWidth=2;
        context.fillStyle="slive";
        context.fillText("Hello ",300,300);
        context.strokeText("world!",400,400);

        context.closePath();
        var img=new Image();//创建对象
        img.src="img/login2.jpg";//加载图片

        img.onload=function(){
        //加载图像
            if(img.width!=canvas.width){
                canvas.width=img.width;
            }
            if(img.height!=canvas.height){
                canvas.height=img.height;
            }
            context.drawImage(img,0,0);
        }
context.save(); 

context.shadowOffsetX = 10;
context.shadowOffsetY = 10;
context.shadowBlur = 5;
context.shadowColor = "rgba(0,0,0,0.5)";

context.fillStyle = "#CC0000";
context.fillRect(10,10,150,100);

context.restore(); 
context
context.fillStyle = "#000000";
context.fillRect(180,10,150,100);

上面代码先用save方法,保存了当前设置,然后绘制了一个有阴影的矩形。接着,使用restore方法,恢复了保存前的设置,绘制了一个没有阴影的矩形。

四、像素处理

Paste_Image.png
上一篇下一篇

猜你喜欢

热点阅读