HTML_5 Canvas(1)

简介:

HTML5 简介

 

HTML5相对于html4的优点是:

1 多了许多标签,提供了更为合理的Tag

2 提供了极为强大的API接口,使得以前需要使用复杂的javascrpt实现的功能直接使用标签就可以使用了

3 Html仍然在不断完善过程中,现在大部分浏览器已经具备了某些html5的支持,浏览器支持的比例按照google chrome,opera,firefox,safari,ie逐渐减少

 

Canvas 接口

HTML5提供<canvas>标签

比如<canvas id="myCanvas"></canvas>

 

基本的模板:

<!DOCTYPE HTML>

<html>

<head>

<script>

window.onload = function(){

//获取canvas元素

var canvas = document.getElementById("myCanvas");

//初始化canvas元素是2D的(可能有读者就想这里可能会有3d的)

var context = canvas.getContext("2d");

// 把操作写在这里TODO

};

</script>

</head>

<body>

<canvas id="myCanvas" width="578" height="200">

</canvas>

</body>

</html>

 

Canvas的接口:

context.moveTo(x,y); //将画笔移动到(x,y)

context.lineTo(x,y); //从当前画笔画一条线到(x,y)

context.stroke();//画线并显示 
context.lineWidth=[value]; //笔触长度

context.strokeStyle=[value]; //画线颜色

context.lineCap=[value]; //比划类型,value可以是butt,round,square

 

context.arc(centerX, centerY, radius, startingAngle,

endingAngle, antiClockwise);//画一个圆弧,以centerX,centerY为圆心,radius为半径,开始角度为staringAngle,结束角度为endingAngle,antiClockwise是代表顺时针

 

window.onload = function(){
    var canvas = document.getElementById("myCanvas");
    var context = canvas.getContext("2d");
 
    var centerX = 288;
    var centerY = 160;
    var radius = 75;
    var startingAngle = 1.1 * Math.PI;
    var endingAngle = 1.9 * Math.PI;
    var counterclockwise = false;
 
    context.arc(centerX, centerY, radius, startingAngle,
        endingAngle, counterclockwise);
 
    context.lineWidth = 15;
    context.strokeStyle = "black"; // line color
    context.stroke();
};

产生的图就是

clip_image002

 

context.quadraticCurveTo(controlX, controlY, endX, endY);

//画一条二次曲线(数学上的二次曲线是三点确定一个曲线,因此就有startpoint,controlpoint,endpoint三个点来确定)

window.onload = function(){
    var canvas = document.getElementById("myCanvas");
    var context = canvas.getContext("2d");
 
    context.moveTo(188, 150);
 
    var controlX = 288;
    var controlY = 0;
    var endX = 388;
    var endY = 150;
 
    context.quadraticCurveTo(controlX, controlY, endX, endY);
    context.lineWidth = 10;
    context.strokeStyle = "black"; // line color
    context.stroke();
};

产生的效果

clip_image004

 

 

context.bezierCurveTo(controlX1, controlY1, controlX2, controlY2, endX, endY);

//贝塞尔曲线,贝塞尔曲线由4个点组成,具体说明可以参考度娘http://baike.baidu.com/view/60154.htm

window.onload = function(){
    var canvas = document.getElementById("myCanvas");
    var context = canvas.getContext("2d");
 
    context.moveTo(188, 130);
 
    var controlX1 = 140;
    var controlY1 = 10;
    var controlX2 = 388;
    var controlY2 = 10;
    var endX = 388;
    var endY = 170;
 
    context.bezierCurveTo(controlX1, controlY1, controlX2,
        controlY2, endX, endY);
 
    context.lineWidth = 10;
    context.strokeStyle = "black"; // line color
    context.stroke();
};

生成的效果:

clip_image006

起始点加上参数的三个点组成四个点就划成了贝塞尔曲线

 

 

context.beginPath();

//将多种曲线和在一起的方法

window.onload = function(){
    var canvas = document.getElementById("myCanvas");
    var context = canvas.getContext("2d");
 
    context.beginPath();
    context.moveTo(100, 20);
    context.lineTo(200, 160); // line 1 画直线
    context.quadraticCurveTo(230, 200, 250, 120); // quadratic curve 二次曲线
    context.bezierCurveTo(290, -40, 300, 200, 400, 150); // bezier curve
    context.lineTo(500, 90); // line 2
    context.lineWidth = 5;
    context.strokeStyle = "#0000ff";
    context.stroke();
};

效果图:

clip_image008

 

 

context.lineJoin=[value];

//将两条直线连接起来的方式,比如可以是miter(直连), round(圆连), bevel(平连)

window.onload = function(){
    var canvas = document.getElementById("myCanvas");
    var context = canvas.getContext("2d");
 
    // miter line joine (left)
    context.beginPath();
    context.moveTo(canvas.width / 2 - 50 - 140, canvas.height - 50); // line 1
    context.lineTo(canvas.width / 2 - 140, 50); // line 1
    context.lineTo(canvas.width / 2 + 50 - 140, canvas.height - 50); // line 1
    context.lineWidth = 25;
    context.lineJoin = "miter";
    context.stroke();
 
    // round line join (middle)
    context.beginPath();
    context.moveTo(canvas.width / 2 - 50, canvas.height - 50); // line 1
    context.lineTo(canvas.width / 2, 50); // line 1
    context.lineTo(canvas.width / 2 + 50, canvas.height - 50); // line 1
    context.lineWidth = 25;
    context.lineJoin = "round";
    context.stroke();
 
    // bevel line join (right)
    context.beginPath();
    context.moveTo(canvas.width / 2 - 50 + 140, canvas.height - 50); // line 1
    context.lineTo(canvas.width / 2 + 140, 50); // line 1
    context.lineTo(canvas.width / 2 + 50 + 140, canvas.height - 50); // line 1
    context.lineWidth = 25;
    context.lineJoin = "bevel";
    context.stroke();
};

效果图:

clip_image010

 

context.arcTo(controlX,controlY,endX,endY,radius);

//制作圆弧拐角

window.onload = function(){
    var canvas = document.getElementById("myCanvas");
    var context = canvas.getContext("2d");
 
    var rectWidth = 200;
    var rectHeight = 100;
    var rectX = canvas.width / 2 - rectWidth / 2;
    var rectY = canvas.height / 2 - rectHeight / 2;
 
    var cornerRadius = 50;
 
    context.beginPath();
    context.moveTo(rectX, rectY);
    context.lineTo(rectX + rectWidth - cornerRadius, rectY);
    context.arcTo(rectX + rectWidth, rectY, rectX + rectWidth,
        rectY + cornerRadius, cornerRadius);
    context.lineTo(rectX + rectWidth, rectY + rectHeight);
 
    context.lineWidth = 5;
    context.stroke();
};

效果图:

clip_image012

 

 

context.closePath();

//完成一条封闭的图案

window.onload = function(){

var canvas = document.getElementById("myCanvas");

var context = canvas.getContext("2d");

context.beginPath(); // begin custom shape

context.moveTo(170, 80);

context.bezierCurveTo(130, 100, 130, 150, 230, 150);

context.bezierCurveTo(250, 180, 320, 180, 340, 150);

context.bezierCurveTo(420, 150, 420, 120, 390, 100);

context.bezierCurveTo(430, 40, 370, 30, 340, 50);

context.bezierCurveTo(320, 5, 250, 20, 250, 50);

context.bezierCurveTo(200, 5, 150, 20, 170, 80); //注意这里的170,80必须和起点一样

context.closePath(); // complete custom shape

context.lineWidth = 5;

context.strokeStyle = "#0000ff";

context.stroke();

};

效果图:

clip_image014

 

 

context.fillStyle=[value];

context.fill();

//这两个要连在一起用,为封闭的曲线上色

比如

context.fillStyle = "#8ED6FF";

context.fill();

 

context.rect(topLeftCornerX,topLeftCornerY,width,height);

//画矩形,需要给出左上角坐标和高宽

 

context.arc(centerX,centerY,radius,0,2*Math.PI,false);

//画圆,圆心(centerX, centerY),半径为radius,从0角度开始,2pi角度,顺时针画

 

该代码都是从http://www.html5canvastutorials.com/ copy过来的,仅仅做了一些翻译和注释

强烈推荐这个网站作为学习html5 canvas的站点。

笔者也刚开始学习html5,这篇是学习笔记

 




本文转自轩脉刃博客园博客,原文链接:http://www.cnblogs.com/yjf512/archive/2011/09/11/2173746.html,如需转载请自行联系原作者



相关文章
|
12天前
|
Web App开发 移动开发 前端开发
html5 canvas五彩碎纸屑飘落动画特效
h5 canvas飘落纸片动画是一款实现五彩纸屑飘落的背景动画特效,基于canvas绘制的空中飘落的纸屑片动画特效,适用于网页动态背景效果代码。简单使用,欢迎下载!代码适用浏览器:搜狗、360、FireFox(建议)、Chrome、Safari、Opera、傲游、世界之窗,是一款不错的的特效插件,希望大家喜欢!
32 5
|
24天前
|
前端开发
基于canvas实现的彩色纸屑组成文字3d动画HTML源码
基于canvas实现的彩色纸屑组成文字3d动画HTML源码
19 0
基于canvas实现的彩色纸屑组成文字3d动画HTML源码
|
24天前
|
移动开发 前端开发 HTML5
HTML5 Canvas制作的粒子十秒倒计时源码
一段基于HTML5 Canvas制作的粒子爆炸,十秒数字倒计时,全屏倒计时动画效果,给人一种非常大气的视觉感
22 0
HTML5 Canvas制作的粒子十秒倒计时源码
|
5月前
|
移动开发 前端开发 JavaScript
基于 HTML5 和 Canvas 开发的在线图片编辑器
基于 HTML5 和 Canvas 开发的在线图片编辑器
110 0
|
1月前
|
前端开发 JavaScript
Canvas三维变化背景动画HTML源码
Canvas三维变化背景动画HTML源码
31 5
|
6月前
|
移动开发 前端开发 API
HTML5 Canvas渐进填充与透明
HTML5 Canvas渐进填充与透明
180 7
|
6月前
|
移动开发 前端开发 API
HTML5 Canvas 填充与描边(Fill And Stroke)
HTML5 Canvas 填充与描边(Fill And Stroke)
86 3
|
3月前
|
XML 移动开发 前端开发
HTML5 SVG和canvas的性能探讨
HTML5 中的 SVG(可缩放矢量图形)和 Canvas(画布)分别用于网页图形绘制。SVG 基于矢量图形,使用 XML 描述,适合静态或少量动态内容(如图标、图表),易于编辑且保持高分辨率;Canvas 则基于位图,通过 JavaScript 绘制,更适合快速更新大量图形的场景(如游戏、动态动画),但在复杂图形计算时可能遇到性能瓶颈。总体而言,SVG 适用于静态和少量动态内容,而 Canvas 更适合高频率更新和性能要求高的场景。
|
3月前
|
移动开发 前端开发 JavaScript
HTML5 Canvas详解及应用
HTML5 Canvas 允许通过 JavaScript 在网页上动态绘制图形、动画等视觉内容。首先在 HTML 中定义 `&lt;canvas&gt;` 元素,并通过 JavaScript 获取画布上下文进行绘制。常见方法包括绘制矩形、路径、圆形和文本,以及处理图像和创建动画效果。适用于游戏开发、数据可视化、图像编辑和动态图形展示等多种应用场景。需要注意性能优化、无状态绘制及自行处理事件等问题。
|
3月前
|
移动开发 前端开发 数据挖掘
用HTML5中的 画布(Canvas)在“圳品”信息系统网页上绘制显示饼图
用HTML5中的 画布(Canvas)在“圳品”信息系统网页上绘制显示饼图
下一篇
DataWorks