canvas入门(绘制篇)

什么是canvas?

  canvas即画布,HTML5的canvas元素可以在其矩形区域绘制图像。

创建canvas,通过js创建context对象

<canvas id="canvas" width="500" height="300"></canvas>
<script type="text/javascript">
	var c=document.getElementById("canvas");
	var cxt=c.getContext("2d");
</script>

ps:  画布的宽度和高度只能通过标签属性设置,如果使用style控制画布会被拉伸  

画布的坐标

x为500,y为300. 分别对应宽和高

绘制线条

<script type="text/javascript">
	var c=document.getElementById("canvas");
	var cxt=c.getContext("2d");
	cxt.moveTo(250,150);    //线条起点
        cxt.lineWidth=10;    //线条宽度
	cxt.lineCap="round";  //线条端点样式  round,square
	cxt.lineTo(500,300);    //线条终点
	cxt.strokeStyle="#ff0000";    //线条颜色
	cxt.stroke();    //绘制
</script>

绘制矩形

<script type="text/javascript">
	var c=document.getElementById("canvas");
	var ctx=c.getContext("2d");

	ctx.rect(20,20,150,100);
	ctx.stroke();                     //等同于ctx.strokeRect(20,20,150,100);

	ctx.rect(20,20,150,100);
	ctx.fill();                      //等同于ctx.fillRect(20,20,150,100);
</script>

 rect( x , y , w , h) ;
     x : 矩形左上角x坐标
     y : 矩形左上角y坐标
     w : 矩形宽度
     h : 矩形高度

绘制圆弧

<script type="text/javascript">
	var c=document.getElementById("canvas");
	var ctx=c.getContext("2d");
	ctx.arc(100,75,50,0,2*Math.PI);
	ctx.stroke();
</script>

 arc(x,y,r,开始角,结束角,顺时针绘图false/逆时针回复true)

实例??

 前端小白今天看了一下画布的基础用法,先做了一个时钟 . .

<!DOCTYPE html>
	<html lang="en">

	<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
    </style>
	</head>

	<body>
    <canvas id="canvas" width="400" height="400"></canvas>
    <script>
    var canvas = document.getElementById("canvas");
    var ctx = canvas.getContext("2d");
    var width = canvas.width;
    var height = canvas.height;
    var r = width / 2;
    var r2 = r * 0.85;

    function draw(){
    	ctx.clearRect(0,0,width,height);  //清空矩形区域的元素
    	//外圆
	    ctx.beginPath();  //起始路径
	    ctx.arc(r, r, r - 5, 0, 2 * Math.PI, true);
	    ctx.lineWidth = 10;
	    ctx.strokeStyle = ‘green‘;
	    ctx.stroke();
	    ctx.closePath();  //闭合路径

	    //内圆
	    ctx.beginPath();
	    ctx.arc(r, r, r2, 0, 2 * Math.PI, true);
	    ctx.lineWidth = 1;
	    ctx.strokeStyle = ‘#000‘;
	    ctx.stroke();
	    ctx.closePath();

	    //内圆点
	    var hour = [6, 5, 4, 3, 2, 1, 12, 11, 10, 9, 8, 7],
	        i = 0;
	    for (var deg = 0; deg < 360; deg = deg + 6) {
	        var spotX = r + r2 * Math.sin(deg * 2 * Math.PI / 360);
	        var spotY = r + r2 * Math.cos(deg * 2 * Math.PI / 360);
	        var spot = r * 0.02;
	        ctx.beginPath();
	        ctx.fillStyle = "#ccc";
	        if (deg % 30 == 0) {
	            ctx.fillStyle = "#000";
	            spot = r * 0.025;
	            var textX = r + (r2 * 0.85) * Math.sin(deg * 2 * Math.PI / 360);
	            var textY = r + (r2 * 0.85) * Math.cos(deg * 2 * Math.PI / 360);
	            ctx.font = r * 0.1 + "px Arial";
	            ctx.textBaseline = "middle";
	            ctx.textAlign = "center";
	            ctx.fillText(hour[i], textX, textY);
	            i++;
	        }
	        ctx.arc(spotX, spotY, spot, 0, 2 * Math.PI);
	        ctx.fill();
	        ctx.closePath();
	    }

	    //中心圆点
	    ctx.beginPath();
	    ctx.arc(r, r, r * 0.05, 0, 2 * Math.PI, true);
	    ctx.lineWidth = 1;
	    ctx.strokeStyle = ‘#000‘;
	    ctx.stroke();
	    ctx.closePath();
    }

    //时针
    function drawHours(h,m){
    	ctx.save();
    	ctx.translate(r,r);
    	ctx.beginPath();
    	ctx.rotate(2*Math.PI/12*h+2*Math.PI/12/60*m);
    	ctx.strokeStyle = ‘#000‘;
    	ctx.lineWidth = 5;
    	ctx.lineCap = ‘round‘;
    	ctx.moveTo(0,r*0.4*0.2);
    	ctx.lineTo(0,-r*0.4);
    	ctx.stroke();
    	ctx.closePath();
    	ctx.restore();
    }

    //分针
    function drawMinute(m,s){
    	ctx.save();
    	ctx.translate(r,r);
    	ctx.beginPath();
    	ctx.rotate(2*Math.PI/60*m+2*Math.PI/60/60*s);
    	ctx.strokeStyle = ‘#000‘;
    	ctx.lineWidth = 2;
    	ctx.lineCap = ‘round‘;
    	ctx.moveTo(0,r*0.6*0.2);
    	ctx.lineTo(0,-r*0.6);
    	ctx.stroke();
    	ctx.closePath();
    	ctx.restore();
    }
    //秒针
    function drawSecond(s){
    	ctx.save();
    	ctx.translate(r,r);
    	ctx.beginPath();
    	ctx.rotate(2*Math.PI/60*s);
    	ctx.strokeStyle = ‘#f00‘;
    	ctx.lineWidth = 1;
    	ctx.lineCap = ‘round‘;
    	ctx.moveTo(0,r*0.8*0.2);
    	ctx.lineTo(0,-r*0.8);
    	ctx.stroke();
    	ctx.closePath();
    	ctx.restore();
    }

    setInterval(function(){
    	var now = new Date();
    	h = now.getHours();
    	m = now.getMinutes();
    	s = now.getSeconds();
    	draw();
    	drawHours(h,m);
    	drawMinute(m,s);
    	drawSecond(s);
    },1000);
    </script>
	</body>

	</html>

参考文档: http://www.w3school.com.cn/html5/html_5_canvas.asp

时间: 2024-10-10 09:48:02

canvas入门(绘制篇)的相关文章

Canvas入门(1):绘制矩形、圆、直线、曲线等基本图形

来源:http://www.ido321.com/968.html 一.Canvas的基础知识 Canvas是HTML 5中新增的元素,专门用于绘制图形.canvas元素就相当于一块"画布",一块无色的透明区域.须要利用JavaScript编写在当中进行绘画的脚本. 在页面放置canvas元素非常easy.利用<canvas>标签.同一时候指定几个主要的属性:id,width和height.接下来通过几个小案例,跟我入门canvas吧~~~^_^~~~ 二.Canvas小案

canvas入门-2路径、文字

1.canvas是一个二维网格坐标系 2.canvas路径 <script type="text/javascript">//绘制矩形 var oCanvas = document.getElementById('canvas-1'); var context = oCanvas.getContext('2d');//指向2d渲染环境的引用 context.moveTo(0,0); context.lineTo(0,100); context.lineTo(100,100)

canvas入门-1三种填充方式、渐变、模式

1.定义canvas的尺寸的时候最好用html的方式定义,用width和height的方式,用css会导致画布按照css设定的方式进行缩放,cavas内部是一个2d的渲染环境 2.一个canvas对应一个2d的渲染环境,绘制图形的操作都是在2d渲染环境中进行的 <canvas id="canvas-1" style="border:solid 1px gray;" width = "400" height="400"&g

安卓自己定义View进阶-Canvas之绘制基本形状

Canvas之绘制基本形状 作者微博: @GcsSloop [本系列相关文章] 在上一篇自己定义View分类与流程中我们了解自己定义View相关的基本知识,只是,这些东西依然还是理论,并不能拿来(zhuang)用(B), 这一次我们就了解一些能(zhaung)用(B)的东西. 在本篇文章中,我们先了解Canvas的基本用法,最后用一个小演示样例来结束本次教程. 一.Canvas简单介绍 Canvas我们能够称之为画布,能够在上面绘制各种东西,是安卓平台2D图形绘制的基础,非常强大. **一般来说

canvas高效绘制10万图形,你必须知道的高效绘制技巧

最近的一个客户项目中,简化的需求是绘制按照行列绘制很多个圆圈.需求看起来不难,上手就可以做,写两个for循环. 原始绘制方法 首先定义了很多Circle对象,在遍历循环中调用该对象的draw方法.代码如下: for (var i = 0; i < column; i++) { for (var j = 0; j < row; j++) { var circle = new Circle({ x: 8 * i + 3, y: 8 * j + 3, radius: 3 }) box.push(ci

HTML5在canvas中绘制复杂形状附效果截图

HTML5在canvas中绘制复杂形状附效果截图 一.绘制复杂形状或路径 在简单的矩形不能满足需求的情况下,绘图环境提供了如下方法来绘制复杂的形状或路径. beginPath() : 开始绘制一个新路径. closePath() : 通过绘制一条当前点到路径起点的线段来闭合形状. fill() , stroke() : 填充形状或绘制空心形状. moveTo() : 将当前点移动到点(x,y). lineTo() : 从当前点绘制一条直线到点(x,y). arc(x,y,r,sAngle,eAn

Android中使用SurfaceView和Canvas来绘制动画

其实每个View中都有Canvas可以用来绘制动画,只需要在这个View中重载onDraw()方法就可以,但是SurfaceView类是一个专门用来制动动画的类. Canvas(中文叫做"画布")就和HTML5中的canvas标签一样可以在一定区域内自由绘制图形.Canvas+SurfaceView制作的动画与View Animation和Property Animation这类动画比起来更加适合大量的集中播放的动画,比如游戏画面.相机的图像显示等. 因为SurfaceView通常会在

HTML5 在canvas中绘制矩形

作者:卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/32930501 一.绘制矩形 canvas使用原点(0,0)在左上角的坐标系统,x坐标向右递增,y坐标向下递增. 使用绘图环境的矩形绘制函数来绘制矩形. fillRect(x,y,width,height) : 绘制一个实心的矩形. strokeRect(x,y,width,height) : 绘制一个空心的矩形. clearRect(x,y,width,height) : 清

[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,

canvas基础绘制-绚丽倒计时

效果图: html: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>ball</title> <script src="digit_1.js"></script> <script src="countdown.js"></