HTML5新增Canvas标签及对应属性、API详解(基础一)

知识说明:

HTML5新增的canvas标签,通过创建画布,在画布上创建任何想要的形状,下面将canvas的API以及属性做一个整理,并且附上时钟的示例,便于后期复习学习!Fighting!

一、标签原型

<canvas width=”1000” height=”1000” id=”myCanvas”>

您的浏览器版本过低,不支持HTML5新增的canvas标签。

</canvas>

使用js获取该画布,并指定对象

<script>

Var canvasID = document.getElementById(“myCanvas”);

Var canvas = canvasID.getContext(“2d”);

</script>

二、canvas标签常见属性


属性



功能描述


width


pixels


设置canvas的宽度


height


pixels


设置canvas的高度

三、canvas标签的API整合


属性



功能描述


save()


Canvas.save();


保存当前画布环境状态


Restore()


Canvas.restore();


返回之前保存的画布的路径状态,与save()成对用


getContext()


Canvas.getContext();


返回一个对象,指出访问绘图功能必要的API


toDataURL()


Canvas.toDataURL();


返回canvas图像的url

四、canvas标签API的主要属性整合

a、 画圆


属性



功能描述


fillStyle


Canvas.fillStyle=”#f00”


设置或返回用于填充绘画的颜色、渐变或模式


strokeStyle


Canvas.strokeStyle=”#f0f”;


设置或返回用于笔触的颜色、渐变或模式


beginPath()


Canvas.beginPath();


开启画路径


closePath()


Canvas.closePath();


关闭画路径


Arc()


Canvas.arc(0,0,10,0,360,false);

参数:原点X、原点Y、原点起始弧度,原点结束弧度、顺时针/逆时针


画圆


Fill()


Canvas.fill()


填充


Stroke()


Canvas.stroke()


画边框

画圆代码片段:

<script>

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

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

//画圆方法

function drawArc(id)

{

canvas.beginPath();

canvas.lineWidth = 5;

canvas.fillStyle = "#00f";

canvas.strokeStyle = "#0f0";

canvas.arc(100, 100, 50, 0, 360, false);

canvas.fill();

canvas.stroke();

canvas.closePath();

}

drawArc("myCanvas");

</script>

b、 画线


属性



功能描述


Translate


Canvas.translate(200,200)


重置坐标原点


lineWidth


Canvas. lineWidth=10;


设置线的宽度


moveTo ()


Canvas. moveTo (0,0);


开始画线的初始位置


lineTo ()


Canvas. lineTo (100,0);


画线结束点位置

画线代码片段:

<script>

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

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

function drawLine(id)

{

canvas.save();

canvas.translate(150,100);

canvas.lineWidth= 10;

canvas.strokeStyle = "#999";

canvas.beginPath();

canvas.moveTo(0,0);

canvas.lineTo(100,0);

canvas.closePath();

canvas.stroke();

canvas.restore();

}

drawLine("myCanvas");

</script>

c、 画多边形

画三角形代码片段:

//画多边形,此处以三角形为例

<script>

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

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

function drawSanjiao(id)

{

canvas.save();

canvas.translate(250,40);

canvas.lineWidth = 3;

canvas.strokeStyle = "#0f0";

canvas.beginPath();

canvas.moveTo(0,0);

canvas.lineTo(0,120);

canvas.lineTo(100,60);

canvas.lineTo(0,0);

canvas.stroke();

canvas.closePath();

canvas.restore();

}

drawSanjiao("myCanvas");

</script>

d、 画文字

画文字代码片段:

<script>

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

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

function drawText(id)

{

canvas.save();

canvas.translate(100,300);

canvas.strokeStyle="#09";

canvas.fillStyle = "#879";

canvas.font = "normal 90px 微软雅黑";

canvas.strokeText("hello html5", 0, 0);

canvas.fillText("hello html5", 0, 0);

canvas.restore();

}

drawText("myCanvas");

</script>

以上a、b、c、d整合效果如下图:

五、使用canvas标签绘制时钟

代码片段:

<canvas width="1000" height="1000" id="clockCanvas">

您的浏览器版本太低,不支持显示时钟的canvas标签

</canvas>

<script>

var clockID = document.getElementById("clockCanvas");

var clock = clockID.getContext("2d");

/*步骤:画钟表整体思路步骤分析

1、使用canvas创建画布,并创建一个2d对象

2、使用function方法做计算

3、实例化Date()对象,通过该对象获取系统当前的时、分、秒

4、通过计算将24小时制转化为12小时制

5、画表盘

6、画刻度盘

7、画指针

8、使用setInterval(fun, time);设置动态

*/

//画时钟的方法

function drawClock(id)

{

//每次清空画布

clock.clearRect(0,0,1000,1000);

//获取系统当前时间(时 、分 、秒)

var now = new Date();  //实例化一个当前时间的对象,通过该对象获取系统当前时间

var sec = now.getSeconds();  //秒

var mins = now.getMinutes();  //分

var hours = now.getHours();    //时

//绘制文字,显示系统当前时间:

clock.save();

clock.translate(0,500);

clock.fillStyle = "#ff0";

clock.strokeStyle = "#eee";

clock.font = "bold 50px 微软雅黑";

clock.strokeText("系统当前时间为:"+hours+"时"+mins+"分"+sec+"秒", 100, 100);

clock.fillText("系统当前时间为:"+hours+"时"+mins+"分"+sec+"秒", 100, 100);

clock.restore();

//计算:满60分加一小时

hours = hours + mins/60;

//计算:将24小时制转化为12小时制

hours = hours>12?hours-12:hours;

//画表盘

clock.beginPath();

clock.lineWidth = 10;

clock.strokeStyle = "#ff00ff";

clock.arc(300, 300, 200, 0, 360, false);

clock.stroke();

clock.closePath();

//画刻度盘

//时刻度

for(var i = 0; i < 12; i++)

{

clock.save();

//将起始点定位到圆心

clock.translate(300,300);

//设置刻度的样式

clock.lineWidth = 7;

clock.strokeStyle = "#999999";

//设置旋转角度

clock.rotate(i*30*Math.PI/180);

clock.beginPath();

clock.moveTo(0, -170);

clock.lineTo(0, -190);

/*clock.font = "normal 20px 宋体";

clock.textAlign = "left";

clock.textBaseLine = "top";

clock.strokeText(i, i*(-50)*Math.PI/180, -150);

clock.closePath();*/

//画刻度线

clock.stroke();

clock.restore();

}

//分刻度

for(var j = 0; j<60; j++)

{

clock.save();

//设置起始点坐标

clock.translate(300,300);

clock.lineWidth = 5;

clock.strokeStyle = "#999999";

//设置旋转角度

clock.rotate(j*6*Math.PI/180);

clock.beginPath();

clock.moveTo(0, -180);

clock.lineTo(0, -190);

clock.closePath();

clock.stroke();

clock.restore();

}

//时针

clock.save();

clock.translate(300,300);

clock.lineWidth = 7;

clock.strokeStyle = "#000000";

//设置小时的旋转角度,没转一次走30°

clock.rotate(hours*30*Math.PI/180);

clock.beginPath();

clock.moveTo(0,15);

clock.lineTo(0,-120);

clock.stroke();

clock.closePath();

clock.restore();

//分针

clock.save();

clock.translate(300, 300);

clock.rotate(mins*6*Math.PI/180);

clock.lineWidth = 5;

clock.strokeStyle = "#000";

clock.beginPath();

clock.moveTo(0,20);

clock.lineTo(0,-160);

clock.stroke();

clock.closePath();

clock.restore();

//秒针

clock.save();

clock.translate(300,300);

clock.rotate(sec*6*Math.PI/180);

clock.lineWidth = 3;

clock.strokeStyle = "#f00";

clock.beginPath();

clock.moveTo(0, 25);

clock.lineTo(0,-165);

clock.stroke();

clock.closePath();

//秒针圆心处一个小圈

clock.fillStyle = "#999";

clock.strokeStyle = "#f00";

clock.beginPath();

clock.arc(0,0,6,0,360,false);

clock.fill();

clock.stroke();

clock.closePath();

//秒针顶部一个小圈

clock.beginPath();

clock.arc(0,-140,6,0,360,false);

clock.fill();

clock.stroke();

clock.closePath();

clock.restore();

}

drawClock();

setInterval(drawClock, 1000);  //是表针根据系统当前时间转动起来

</script>

绘制结果如下图:

时间: 2024-12-10 12:49:52

HTML5新增Canvas标签及对应属性、API详解(基础一)的相关文章

html5新增的标签和使用的方法

html5新增的标签: /*<article> 标签定义独立的内容.*/ <article> <h1>标题</h1> <a href="#">你好</a> <p>这是一段文件内容</p> </article> /*<aside> 标签定义其所处内容之外的内容. 提示:提示:<aside> 的内容可用作文章的侧栏.*/ <p>Me and my

Android基础入门教程——8.3.16 Canvas API详解(Part 1)

Android基础入门教程--8.3.16 Canvas API详解(Part 1) 标签(空格分隔): Android基础入门教程 本节引言: 前面我们花了13小节详细地讲解了Android中Paint类大部分常用的API,本节开始我们来讲解 Canvas(画板)的一些常用API,我们在Android基础入门教程--8.3.1 三个绘图工具类详解 中已经列出了我们可供调用的一些方法,我们分下类: drawXxx方法族:以一定的坐标值在当前画图区域画图,另外图层会叠加, 即后面绘画的图层会覆盖前

Android基础入门教程——8.3.18 Canvas API详解(Part 3)Matrix和drawBitmapMash

Android基础入门教程--8.3.18 Canvas API详解(Part 3)Matrix和drawBitmapMash 标签(空格分隔): Android基础入门教程 本节引言: 在Canvas的API文档中,我们看到这样一个方法:drawBitmap(Bitmap bitmap, Matrix matrix, Paint paint) 这个Matrix可是有大文章的,前面我们在学Paint的API中的ColorFilter中曾讲过ColorMatrix 颜色矩阵,一个4 * 5 的矩阵

CSS3新增属性text-shadow详解及燃烧的字体实战开发

今天我们有很多程序员在给文本设置样式时,都感觉无从下手.一般有两种情况: 1) 不知道关于文本到底有哪些样式属性: 2) 即使借助开发工具的自动提醒,依然不清楚样式属性的具体意思,以及具体用法. 今天这篇文章,我将带领大家一起来领受CSS3在文本样式应用方面的超强能力.通过精彩的实例,来使大家重新认识CSS3文本样式,真心希望大家通过此篇文章,即使不能做到精通CSS3的文本样式的应用,也会做到熟练应用. 实例: 如何利用CSS3制作燃烧的字体? 以前,如果我们网页上想要显示一个燃烧着的文本,大家

hibernate学习(2)——api详解对象

1   Configuration 配置对象 /详解Configuration对象 public class Configuration_test { @Test //Configuration 用户加载配置文件 public void fun1(){ //1.1 调用configure() 方法=> 加载src下名为hibernate.cfg.xml Configuration conf = new Configuration().configure(); //1.2 如果配置文件不符合默认加

CSS3属性选择器详解 及 双色球实战开发

在前面的章节中,我们了解了,可以使用行内样式,ID选择器,类选择器,以及标签选择器来给一个元素应用样式. 如果我们想给定义了那些都定义了某一个属性的元素应用样式,这个时候我们该怎么做呢? 这一节中,我将使用 双色球案例 和 文档类型提示图标案例 来引入和应用属性选择器. 双色球案例: 大家都知道,双色球共有7个球,6个红球,1个蓝球.首先我们先在页面上面定义7个span标签: <!DOCTYPE html> <html> <head> <meta charset=

Android——TextView属性XML详解

Android_TextView属性XML详解 博客分类: android Java代码   属性名称    描述 android:autoLink    设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接.可选值(none/web/email/phone/map/all) android:autoText    如果设置,将自动执行输入值的拼写纠正.此处无效果,在显示输入法并输入的时候起作用. android:bufferType  指定getText()方式取

JavaFX学习之道:JavaFX API详解之Window,Stage,PopupWindow

stage包中包含 Window, Stage, PopupWindow, Popup, FileChooser, DirectoryChooser, Screen等类. 其中Window类可理解成一个窗体,用于存放Scene,并与用户操作.一般window作为窗体,都用其子类Stage和PopupWindow. 看一下Window作为窗体的顶级类包含的一些共同属性 eventDispatcher setEventDispatcher(EventDispatcher value) focused

百度地图API详解之事件机制,function“闭包”解决for循环和监听器冲突的问题:

原文:百度地图API详解之事件机制,function"闭包"解决for循环和监听器冲突的问题: 百度地图API详解之事件机制 2011年07月26日 星期二 下午 04:06 和DOM编程里的事件模型一样,百度地图API也提供了类似的事件机制.本文介绍了事件监听的添加和移除方法,this指针和事件参数的使用以及绑定事件监听函数中涉及的闭包问题,最后分享了一个用来增强地图API事件机制的开源项目. 事件添加和移除 我们最简单的事件开始,下面的代码示例给map对象添加了click事件的监听