html5 canvas-1.canvas介绍(hello canvas)


Posted in HTML / CSS onJanuary 07, 2013

从今天开始,我们将开始一个关于html5 canvas的系列课程。这个系列是我读《HTML5 Canvas:Native Interactivity and Animation for the Web》后的总结,有兴趣的朋友可以去下载英文原版书籍阅读。这本书通过介绍canvas游戏开发的方式,向我们展现canvas强大的功能,我觉得相当不错,通过阅读这本书我学到了canvas很多的知识。其实canvas本身的api并不多,关键是活学活用,学会对api的组合使用制作出令人难以置信的效果。而这本书就是你学习canvas最好的选择,只可惜他暂时还没有中文版,英文不好的朋友只有再等等了。

大家都知道,目前并不是所有的浏览器中支持html5,就算是支持html5的浏览器,也不见得支持html5所有的新特性。所以大家要选择一款比较新的浏览器作为自己的调试环境,建议大家使用firefox(开发者的最爱)或者是chrome浏览器,我所有的例子都是基于firefox开发的。

html5相关的基础知识这里就不做介绍了,网上有很多关于html5的教程,自行学习吧。学习html5需要大家有比较好的javascript的基础,大家可以去汤姆大叔的博客进行学习:http://www.cnblogs.com/TomXu/archive/2011/12/15/2288411.html。其实他的这个系列课程还是有相当难度的,50多篇全学好你应该算是js专家了。
现在我们正式开始我们的canvas课程,第一个例子:“hello canvas”。
首先需要在body中添加canvas标签,如下

复制代码
代码如下:

<canvas id="canvasOne" width="500" height="300">
Your browser does not support HTML5 Canvas.
</canvas>

canvas中的text部分将会在浏览器不支持canvas对象时显示。
定义了canvas标签,当我们需要通过js对他进行操作的时候,通过getElementById就可以实现。
var theCanvas = document.getElementById("canvasOne");我们现在已经习惯使用jquery来开发任务,那么使用jquery如何获取canvas对象呢?
var canvas = $('#canvasOne').get(0);或var canvas = $('#canvasOne')[0];不知道大家注意到get(0)和[0]没有,如果没有使用get()方法或者[]下标的话,你的js代码将不能正常对canvas进行操作。因为$('#canvasOne')获取到的是一个jquery对象,而我们实际要操作的是一个html dom对象。这里有存在一个jquery对象转变成dom对象的问题,通过get()或者下标的方式就完成了这个转换。如果需要把一个dom对象转换成jquery对象,可以使用$()方法实现。不清楚的朋友只有自己去百度了,这里不做深究。
为了代码的健壮性,我们需要判断你的浏览器是否支持canvas对象,可以通过下面代码实现。
复制代码
代码如下:

if (!theCanvas || !theCanvas.getContext) {
return;
}

不过推荐大家使用modernizr.js库完成这一工作,这是一个很通过的html5 js库,提供了很多有用的方法
复制代码
代码如下:

function canvasSupport () {
return Modernizr.canvas;
}

canvas支持2d渲染,通过如下代码实现
var context = theCanvas.getContext("2d");
下面我们就可以通过context对象在canvas上绘制图像了。
复制代码
代码如下:

//设置区域颜色
context.fillStyle = "#ffffaa";
//绘制区域
context.fillRect(0, 0, 500, 300);
//设置字体
context.font = "20px _sans";
//设置垂直对齐方式
context.textBaseline = "top";
//绘制文字
context.fillText ("Hello World!", 195, 80);
//设置边框颜色
context.strokeStyle = "#000000";
//绘制边框
context.strokeRect(5, 5, 490, 290);

下面介绍下图片的绘制。由于图片的异步下载的,为了保证你用canvas绘制一个图片时,该图片已经下载完毕,我们使用下面的方式:
复制代码
代码如下:

var helloWorldImage = new Image();
helloWorldImage.src = "helloworld.gif";
helloWorldImage.onload = function () {
context.drawImage(helloWorldImage, 160, 130);
}

当图片下面完毕时,会触发onload事件,这里再使用context对象绘制图片。
大家下载demo看完整代码,demo下载地址:html5canvas.helloworld.zip
HTML / CSS 相关文章推荐
纯CSS3代码实现文字描边
Apr 25 HTML / CSS
CSS3打造百度贴吧的3D翻牌效果示例
Jan 04 HTML / CSS
HTML5 canvas基本绘图之绘制阴影效果
Jun 27 HTML / CSS
HTML5拖拽文件到浏览器并实现文件上传下载功能代码
Jun 06 HTML / CSS
HTML5中的autofocus(自动聚焦)属性介绍
Apr 23 HTML / CSS
HTML5全屏(Fullscreen)API详细介绍
Apr 24 HTML / CSS
HTML5新特性之用SVG绘制微信logo
Feb 03 HTML / CSS
HTML5 canvas实现移动端上传头像拖拽裁剪效果
Mar 14 HTML / CSS
使用HTML5 Canvas为图片填充颜色和纹理的教程
Mar 21 HTML / CSS
HTML5触摸事件实现移动端简易进度条的实现方法
May 04 HTML / CSS
解决HTML5中的audio在手机端和微信端的不能自动播放问题
Nov 04 HTML / CSS
HTML5播放实现rtmp流直播
Jun 16 HTML / CSS
html5指南-1.html5全局属性(html5 global attributes)深入理解
Jan 07 #HTML / CSS
html5指南-2.如何操作document metadata
Jan 07 #HTML / CSS
html5指南-3.如何实现html元素拖拽功能
Jan 07 #HTML / CSS
html5指南-4.使用Geolocation实现定位功能
Jan 07 #HTML / CSS
html5指南-5.使用web storage存储键值对的数据
Jan 07 #HTML / CSS
html5指南-6.如何创建离线web应用程序实现离线访问
Jan 07 #HTML / CSS
html5指南-7.geolocation结合google maps开发一个小的应用
Jan 07 #HTML / CSS
You might like
PHP中Session引起的脚本阻塞问题解决办法
2014/04/08 PHP
php正则表达式验证(邮件地址、Url地址、电话号码、邮政编码)
2016/03/14 PHP
PHP正则+Snoopy抓取框架实现的抓取淘宝店信誉功能实例
2017/05/17 PHP
php-fpm开启状态统计的方法详解
2017/06/23 PHP
php双层循环(九九乘法表)
2017/10/23 PHP
php-fpm添加service服务的例子
2018/04/27 PHP
可输入的下拉框
2006/06/19 Javascript
巧用js提交表单轻松解决一个页面有多个提交按钮
2013/11/17 Javascript
js onmousewheel事件多次触发问题解决方法
2014/10/17 Javascript
Javascript前端UI框架Kit使用指南之kitjs的对话框组件
2014/11/28 Javascript
jQuery如何解决IE输入框不能输入的问题
2016/10/08 Javascript
ES6新特性四:变量的解构赋值实例
2017/04/21 Javascript
利用C/C++编写node.js原生模块的方法教程
2017/07/07 Javascript
Angular4开发解决跨域问题详解
2017/08/28 Javascript
js中bool值的转换及“&amp;&amp;”、“||”、 “!!”详解
2017/12/21 Javascript
vue非父子组件通信问题及解决方法
2018/06/11 Javascript
JavaScript的Object.defineProperty详解
2018/07/09 Javascript
python封装对象实现时间效果
2020/04/23 Python
分享15个最受欢迎的Python开源框架
2014/07/13 Python
分享给Python新手们的几道简单练习题
2017/09/21 Python
详解python string类型 bytes类型 bytearray类型
2017/12/16 Python
python中ImageTk.PhotoImage()不显示图片却不报错问题解决
2018/12/06 Python
python实现在函数中修改变量值的方法
2019/07/16 Python
django foreignkey外键使用的例子 相当于left join
2019/08/06 Python
python2.7实现复制大量文件及文件夹资料
2019/08/31 Python
webapp字号大小跟随系统字号大小缩放的示例代码
2018/12/26 HTML / CSS
FORZIERI澳大利亚站:全球顶级奢华配饰精品店
2016/12/31 全球购物
帕克纽约:PARKER NY
2018/12/09 全球购物
写出二分查找算法的两种实现
2013/05/13 面试题
幼儿园教师节活动方案
2014/02/02 职场文书
干部作风建设年活动剖析材料
2014/10/23 职场文书
企业计划生育责任书
2015/05/09 职场文书
《叶问2》观后感
2015/06/15 职场文书
手把手教你制定暑期学习计划,让你度过充实的暑假
2019/08/22 职场文书
Python Pandas读取Excel日期数据的异常处理方法
2022/02/28 Python
vue实现可以快进后退的跑马灯组件
2022/04/08 Vue.js