总结html5-canvas学习笔记

canvas是html5中很重要的一部分,我们可以用它来绘制各种平面图形, 3d图,动画等等。每每看到网上超炫的html5页面,首先立马下载下来,心里想着有一天自己也可以做出这样酷炫的效果,骚年你是不是这样的!

比如这样的:

还有这样的(这个是3d效果,点击图片进去看看吧):

但是,功夫不是一天练成的,一门新技术不是你学着做个demo就掌握了的,我们先要一点一点地学习基础知识才行呀。刚开始学html5的时候,我们都会先接触到canvas,api给的方法有很多,我是这样学的,自己写个demo,一个方法一个属性的去试,看它出来是个什么样子的。在这里我主要标记一下,我在练习过程中,遇到的一些疑惑。总结一下canvas.save()和canvas.restore(), canvas.beginPath()和canvas.closePath()怎么用。先把代码拉出来:

canvas.save()和canvas.restore()用法:

save() 和restore()主要在对画布进行转换(如:扭曲,旋转,缩放等)时很用作用。save()方法是保存画布当前状态的,restore()是取出画布 保存的状态。比如现在要对画布进行多个动作处理,第一个动作进行了缩放处理,如果在没有缩放处理前保存一下空白状态,那么再进行第二个动作新建时也会有第 一个动作缩放效果的影响。所以最好在对画布多个动作处理前,先canvas.save()保存一下空白状态或者你希望后面动作需要出现的状态,当前动作处 理完了再canvas.restore()一下,取出保存的空白状态保证后面的动作不受影响。

 /**图形变形**/
    var c10 = document.getElementById("myCanvas10");
    var cre10 = c10.getContext("2d");
    cre10.fillStyle = "#eeeeff";
    cre10.fillRect(0, 0, 300, 300);
    cre10.save();
    cre10.fillStyle = "rgba(255, 0, 0, 0.1)";
    cre10.translate(50, 50);
    cre10.scale(0.5, 0.5);
    cre10.rotate(Math.PI/4);
    cre10.fillRect(0, 0, 100, 100);
    cre10.restore();
    cre10.save();
    cre10.fillStyle = "rgba(255, 0, 0, 0.2)";
    cre10.rotate(Math.PI/4);
    cre10.translate(100, 100);
    cre10.scale(0.5, 0.5);
    cre10.fillRect(0, 0, 100, 100);
    cre10.restore();
    cre10.save();
    cre10.fillStyle = "rgba(255, 0, 0, 0.5)";
    cre10.translate(130, 130);
    cre10.scale(0.5, 0.5);
    cre10.shadowOffsetX = 10;
    cre10.shadowOffsetY = 10;
    cre10.shadowColor = "rgba(100, 100, 100, 0.5)";
    cre10.shadowBlur = 1.5;
    cre10.fillRect(0, 0, 150, 150);

本来效果是这样的:

如果去掉canvas.save()和canvas.restore()以后就是这样的:

canvas.beginPath()和canvas.closePath()用法:

这两个经常应用在绘制线条和圆弧中,可以成对用,也可以单独用,他们两个没有必然的联系。beginPath()是告诉浏览器我要开始划线了记录一下,这里作为一个起始点。closePath()是闭合路径,将结束焦点和起始点用直线链接起来。如果没有有closePath()结束的话,就不会有直线去链接结束点和起始点。

两个一起用是这样的:

没有用closePath()关闭线条:

但是往往不用closePath()方法还可以达到很好的效果:

下面是我用canvas画的小房子,很难看但是也要写出来:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>绘制图形</title>
    <style type="text/css">
        .canv{
            border:1px #d3d3d3 solid;
            margin:20px 10px;
        }
    </style>
</head>
<body>
<canvas class="canv" width="300" height="300" id="canvas01"></canvas>

<script>
    window.onload = function(){
        drawHouse("canvas01");
    };
    //绿瓦红房子
    function drawHouse(id){
        var canv = document.getElementById(id);
        var canvas = canv.getContext("2d");
        canvas.fillStyle = "#eeeeff";
        canvas.fillRect(0, 0, 300, 300);
        console.info("第一步:空白,啥也没有");
        canvas.fillStyle = "green";
        canvas.beginPath();
        canvas.moveTo(150, 10);
        canvas.lineTo(270, 110);
        canvas.lineTo(30, 110);
        canvas.closePath();
        canvas.fill();
        canvas.fillStyle = "black";
        canvas.beginPath();
        canvas.moveTo(80, 68);
        canvas.lineTo(80, 20);
        canvas.lineTo(100, 20);
        canvas.lineTo(100, 52);
        canvas.closePath();
        canvas.fill();
        console.info("第二步:先盖绿色的房顶,黑色的烟囱");
        canvas.fillStyle = "red";
        canvas.beginPath();
        canvas.moveTo(50, 110);
        canvas.lineTo(50, 300);
        canvas.lineTo(250, 300);
        canvas.lineTo(250, 110);
        canvas.closePath();
        canvas.fill();
        console.info("第三步:刷红色的墙");
        canvas.fillStyle = "blue";
        canvas.beginPath();
        canvas.moveTo(80, 140);
        canvas.lineTo(80, 190);
        canvas.lineTo(130, 190);
        canvas.lineTo(130, 140);
        canvas.closePath();
        canvas.fill();
        canvas.strokeStyle = "white";
        canvas.beginPath();
        canvas.moveTo(105, 140);
        canvas.lineTo(105, 190);
        canvas.closePath();
        canvas.stroke();
        canvas.beginPath();
        canvas.moveTo(80, 165);
        canvas.lineTo(130, 165);
        canvas.closePath();
        canvas.stroke();
        console.info("第四步:开个蓝色窗户白色的格子");
        canvas.fillStyle = "white";
        canvas.beginPath();
        canvas.moveTo(150, 210);
        canvas.lineTo(150, 300);
        canvas.lineTo(210, 300);
        canvas.lineTo(210, 210);
        canvas.closePath();
        canvas.fill();
        canvas.fillStyle = "black";
        canvas.beginPath();
        canvas.arc(200, 255, 5, 0, Math.PI*2);
        canvas.closePath();
        canvas.fill();
        canvas.save();
        console.info("第五步:开一扇白色的门,黑把手");
    }

</script>
</body>
</html>
时间: 2024-10-11 03:52:47

总结html5-canvas学习笔记的相关文章

html5 canvas 学习笔记(一)

一.canvas元素API canvas元素并未提供很多API,实际上他只提供了两个属性与三个方法: 1.canvas元素属性 width 属性:与 height 属性: canvas元素绘图表面的宽度,在默认状况下,浏览器会将canvas元素大小设定成与绘图表面大小一致,然而如果在css中覆写了元素大小,那么浏览器则会将绘图表面进行缩放,使之符合元素尺寸.其值为非负整数,默认值为300. 2.canvas元素方法 getContext()方法: 返回与该canvas元素相关的绘图环境对象,每个

HTML5 Canvas 学习笔记(canvas绘制线条、矩形、多边形、圆形、圆环、组合图形、文字、自定义图像)

学习资源:http://www.w3school.com.cn/html5/html_5_canvas.asp   http://blog.csdn.net/clh604/article/details/8536059   http://www.jb51.net/html5/70307.html 一.对 canvas 的理解 <canvas>标签是 HTML5 中的新标签,像所有的 dom 对象一样它有自己本身的属性.方法和事件. canvas 是用来在网页上绘制图形的(我们通常称之为画布),

HTML5 CANVAS学习笔记(一)

<!doctype html> <html> <head> <meta charset="UTF-8"> </head> <style type="text/css"> canvas{border:dashed 2px #CCC} </style> <script type="text/javascript"> function pageLoad(){

Canvas 学习笔记1

#Canvas 学习笔记1 @[Canvas,Nunn,HTML5,javascript] ##前言 相信大家多多少少都有了解过`Canvas`,这里我就不多做解释了,网上也充斥了这方面的知识,很多人看了之后,其实发现作用非常小,因为似乎这些东西什么也做不了,本着学习提升自己,造福大家,我打算把我学习`Canvas`的历程记录在这里. 首先推荐大家先看看阮一峰大大写的这个[Canvas API](http://javascript.ruanyifeng.com/htmlapi/canvas.ht

HTML5+Bootstrap 学习笔记 4

HTML5 <map> <area> 标签 <map> 标签定义客户端的图像映射.图像映射是带有可点击区域的图像. <area> 标签定义图像映射内部的区域(图像映射指的是带有可点击区域的图像). area 元素始终嵌套在 <map> 标签内部. 1 <img src ="planets.gif" alt="Planets" usemap ="#planetmap" /> 2

[HTML5 Canvas学习]使用颜色和透明度

在canvas中使用颜色和透明度,通过context的strokeStyle和fillStyle属性设置,strokeStyle和fillStyle的值可以是任意有效的css颜色字串.可以用RGB.RGBA.HSL.HSLA以及十六进制RGB标注来指定颜色,也可以通过 "yellow"."silver"."teal"这样的颜色名称来指定.除此之外,还可以使用SVG1.0规范中的颜色名称,比如"goldenrod"."

[HTML5 Canvas学习]绘制矩形

1.使用strokeRect和fillRect方法绘制矩形 a.strokeRect是绘制一个不填充的矩形 b.fillRect是绘制一个填充的矩形 代码: <script> var canvas = document.getElementById('canvas'), context = canvas.getContext('2d'); context.lineJoin = 'round'; context.lineWidth = 20; context.strokeRect(10, 10,

[转载]Android Bitmap和Canvas学习笔记

http://blog.chinaunix.net/uid-20771867-id-3053339.html [转载]Android Bitmap和Canvas学习笔记,布布扣,bubuko.com

【HTML】【学习】 Canvas学习笔记【上】

Canvas是HTML新增的开发跨平台动画和游戏的标准解决方案,能够实现对图像和视频进行像素级操作. 一.在页面中添加canvas元素 就像添加一个普通div一样,canvas的添加方式为: <canvas id = "myCanvas" width = "200px" height = "100px">不支持时显示的部分</canvas> 可以用对div添加样式的方法使用CSS对Canvas添加样式 二.使用Canvas

【HTML】【学习】 2、Canvas学习笔记【上】

Canvas是HTML新增的开发跨平台动画和游戏的标准解决方案,能够实现对图像和视频进行像素级操作. 一.在页面中添加canvas元素 就像添加一个普通div一样,canvas的添加方式为: <canvas id = "myCanvas" width = "200px" height = "100px">不支持时显示的部分</canvas> 可以用对div添加样式的方法使用CSS对Canvas添加样式 二.使用Canvas