`

html5 canvas入门

 
阅读更多

可以把canvas看做div,不过,它的长和宽不能通过css来定义,要使用标签属性:

<canvas id=”myCanvas” width=”100px” height=”100px”>

或者javascript对象属性设置:

canvas.width=1024;
canvas.height=768;

使用canvas,只有一种操作方式,使用javascript。

获得canvas对象的上下文对象,该对象是操作canvas的主要对象:

var canvas = document.getElementById(‘myCanvas’);
var context = canvas.getContext(’2d’);

画简单的线

使用canvas画最简单的线, 点击运行示例,结果看起来是这样:

 

代码很简单:

<script>
window.onload = function () {
var canvas = document.getElementById(‘myCanvas’);
canvas.width=1024;
canvas.height=768;
var context = canvas.getContext(’2d’);

context.moveTo(100, 100);//移动到起点
context.lineTo(1024-100, 768-100);//从起点划线到端点
context.lineWidth = 10;//线的宽度
context.strokeStyle = “#ff0000″;//线的颜色
context.lineCap = “butt”;//端点边缘样式,默认是butt
context.stroke();//为线填充颜色,默认颜色黑
};

加入图片

如果想在canvas里加入图片, 点击运行示例,结果类似这样:

 

主要代码如下:

<script>
window.onload = function () {
var canvas = document.getElementById(‘myCanvas’);
canvas.width=1024;
canvas.height=768;
var context = canvas.getContext(’2d’);

var image = new Image();
var x = 50, y = 10;

image.onload = function () {
context.drawImage(image,x,y,image.width*.5,image.height*.5);//缩小到一半
};

image.src = ‘tank.gif’;
};

简单的动画

使用canvas处理动画,其实本质上就是定时重绘canvas。比如在上面图片示例做修改,让坦克运动起来, 点击运行示例

 

这里要考虑的是,如何处理时间间隔。以前的一般做法是使用定时器,每间隔1000ms/60的时间绘制一个canvas,这样能每秒显示60桢,动画应该很流畅。

html5目前大部分浏览器支持一种新的函数,比如chrome下:

window.webkitRequestAnimationFrame(callback)

其中callback是函数,是由你来实现的,用于绘制下一桢canvas。把这个函数传给webkitRequestAnimationFrame,它会统一来绘制。

目前除了Safari未实现这个函数(应该在不久的将来得到实现,因为最新开发中版本的webkit已经带这个函数),各个浏览器均实现了类似功能,为了统一处理,一般会写如下的函数:

window.requestAnimFrame = (function (callback) {
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function (callback) {
window.setTimeout(callback, 1000 / 60);
};
})();

这个函数定义了统一的requestAnimFrame函数,它会检测,如果没有支持,比如Safari的情况,就使用定时器来实现这个功能。

实现动画的主要代码:

<script>
window.onload = function () {
var canvas = document.getElementById(‘myCanvas’);
canvas.width = 1024;
canvas.height = 768;
var context = canvas.getContext(’2d’);

window.requestAnimFrame = (function (callback) {
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function (callback) {
window.setTimeout(callback, 1000 / 60);
};
})();

var image = new Image();
var x = 50, y = 10;

function animate() {
context.clearRect(0, 0, canvas.width, canvas.height);//清除canvas
context.drawImage(image, x++, y++, image.width, image.height);

window.requestAnimFrame(function () {
if (x > 1024) {
console.log(‘animate stop’);
return;
}
animate();
});
}

image.onload = function () {
context.drawImage(image, x, y, image.width, image.height);
animate();
};

image.src = ‘tank.gif’;
};

这里的animate函数被递归调用,直到坦克图片到达canvas边缘停止。

保存和恢复状态

一般动画会有背景,比如 类似这样

 

这要求重新绘制坦克的时候,也要重新绘制后面的线。

canvas提供了save和restore状态的方法,可以把这想象为一个堆栈,save和restore是对当前绘制状态的保存和恢复。

不过,要注意的是,保存和恢复的是状态,而不是图形。比如可以保存线的坐标点,线的宽度,线的样式和线的颜色,这些是状态信息,但是restore的时候并不绘制它们,你还需要调用stroke方法来划线。这已经极大的简化了很多需要重复的劳动了。

主要代码:

<script>
window.onload = function () {
var canvas = document.getElementById(‘myCanvas’);
canvas.width=1024;
canvas.height=768;
var context = canvas.getContext(’2d’);

context.moveTo(100, 100);//移动到起点
context.lineTo(1024-100, 768-100);//从起点划线到端点
context.lineWidth = 10;//线的宽度
context.strokeStyle = “#ff0000″;//线的颜色
context.lineCap = “butt”;//端点边缘样式,默认是butt
context.stroke();//为线填充颜色,默认颜色黑
context.save();

window.requestAnimFrame = (function (callback) {
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function (callback) {
window.setTimeout(callback, 1000 / 60);
};
})();

var image = new Image();
var x = 50, y = 10;

function animate() {
context.clearRect(0, 0, canvas.width, canvas.height);//清除canvas
context.restore();
context.stroke();
//            context.save();
context.drawImage(image,x++,y++,image.width,image.height);

window.requestAnimFrame(function(){
if(x>1024){
console.log(‘animate stop’);
return;
}
animate();
});
}

image.onload = function () {
context.drawImage(image,x,y,image.width,image.height);
animate();
};

image.src = ‘tank.gif’;
};

本文完整源代码可参见: https://github.com/MarshalW/CanvasDemo/tree/gh-pages

分享到:
评论

相关推荐

    HTML5canvas入门教程

    ### HTML5 Canvas 入门教程 #### 一、引言 HTML5 Canvas 是一个非常强大的功能,它允许开发者使用 JavaScript 在网页上绘制图形。Canvas 的出现极大地扩展了 Web 应用程序的可能性,使得动态和交互式的图形成为...

    HTML5 Canvas核心技术源码技术代码

    HTML5 Canvas核心技术源码技术代码、图形、动画与游戏开发。 Canvas开发、入门学习Canvas技术代码。 HTML5 Canvas核心技术源码技术代码、图形、动画与游戏开发。 Canvas开发、入门学习Canvas技术代码。 HTML5 Canvas...

    HTML5CANVAS初级入门教程.pdf

    HTML5 Canvas 初级入门教程 HTML5 Canvas 是 HTML5 中一个非常重要的功能,它允许开发者在浏览器中绘制图形,而不需要使用任何插件。这个功能可以在所有现代浏览器中使用,包括 Internet Explorer 9、Safari 3、...

    htlm5 Canvas

    ### HTML5 Canvas 入门与基础使用 #### 一、Canvas 概述 HTML5 的 `&lt;canvas&gt;` 元素提供了一种在网页上绘制图形的方法,通常通过 JavaScript 来实现。这种元素允许开发者创建动态图形、图表、图像合成以及简单的...

    CANVAS FOR HTML5从入门到精通源码

    本源码包“CANVAS FOR HTML5从入门到精通”涵盖了从基础操作到高级应用的全方位学习材料,下面将对其中涉及的关键知识点进行详细介绍。 1. **基础概念**:HTML5的CANVAS是一个可编程的图形区域,通过JavaScript来...

    HTML5之Canvas入门

    HTML5环境下Canvas入门, 在Chrome或FF环境下可以预览, 些例说明了Canvas下可以随意的进行画图, 我的例子主要以带圆角的矩形及渐变颜色为例子

    HTML 5 CANVAS游戏开发实战

    标题中提到的“HTML 5 CANVAS游戏开发实战”涉及到的知识点包括了HTML 5技术、CANVAS元素以及游戏开发方面的实战应用。HTML 5是最新版本的超文本标记语言,它引入了诸多新的特性来增强网页的表现性能和实现更丰富的...

    HTML5canvas初级入门教程.pdf

    HTML5 Canvas 是一种在网页上进行动态图形绘制的技术,它是HTML5标准的一部分,允许开发者使用JavaScript来创建和修改2D图形。这个初级入门教程主要涵盖了Canvas的基本概念、使用方式以及一些基本的绘图操作。 首先...

    《Html5 Canvas开发详解》示例代码

    HTML5 Canvas是Web开发中的一个强大工具,它允许开发者在网页上进行动态图形绘制,创造出丰富的交互式用户体验。这本书《Html5 Canvas开发详解》第二版提供了详细的示例代码,帮助学习者深入理解Canvas的用法和技巧...

    [HTML5资料]Canvas入门基础教程

    &lt;canvas&gt;是一个新的用于通过脚本(通常是JavaScript)绘图的 HTML元素。例如,他可以用于绘 图、制作图片的组合或者简单的动画(当然并不那么简单)。 Itcanfor instancebe used todraw graphs,make ...

    HTML5 Canvas Cookbook (英文原版)

    《HTML5 Canvas Cookbook》这本书通过实例讲解,不仅适合初学者快速入门,也为有经验的开发者提供了许多实用的解决方案和灵感,是一本值得深入研究的HTML5 Canvas参考资料。通过阅读和实践书中的示例,读者将能够...

    HTML5从入门到精通

    本教程《HTML5从入门到精通》旨在帮助初学者快速掌握这一重要的前端技术。 一、HTML5基础知识 HTML5的基本结构包括文档类型声明(&lt;!DOCTYPE html&gt;)、html标签、head标签和body标签。它们构成了一个基本的HTML页面...

    最佳canvas入门实例,水球,圆环

    这个“最佳canvas入门实例——水球,圆环”旨在引导初学者掌握Canvas的基本用法和技巧,通过实际操作来理解其工作原理。 首先,让我们深入了解一下Canvas。Canvas是一个基于矢量图形的画布元素,通过JavaScript来...

    HTML5 Canvas 画布开发 傻瓜书 (英文版)

    HTML5 Canvas是Web开发中的一个...总之,“HTML5 Canvas 画布开发 傻瓜书”是一本全面介绍Canvas API的入门指南,无论你是网页设计师还是开发者,都能从中获得关于HTML5 Canvas的宝贵知识,开启网页图形编程的新篇章。

    HTML5 Canvas cookbook

    ### HTML5 Canvas Cookbook知识点概述 #### 一、HTML5 Canvas技术简介 HTML5 Canvas 是一种在网页上绘制图形的方法,其核心元素是 `&lt;canvas&gt;`。该元素本身并无内容,但通过 JavaScript 可以在其上进行绘制。Canvas...

Global site tag (gtag.js) - Google Analytics