《Web前端开发精品课——HTML5 Canvas开发详解》——第一部分 Canvas基础

简介:

本节书摘来自异步社区《Web前端开发精品课——HTML5 Canvas开发详解》一书中的第1部分,第1章,作者:莫振杰 著,更多章节内容可以访问云栖社区“异步社区”公众号查看

第1章 Canvas概述

1.1 Canvas简介

在HTML5之前,为了达到页面绚丽多彩的效果,我们很多情况下都是借助“图片”来实现。不过使用图片这种方式,都是以“低性能”为代价的。由于图片体积大、下载速度慢等原因,因此为了应对日渐复杂的Web应用开发,W3C在HTML5标准中引入了Canvas这一门技术。

我们都知道,HTML5新增了一个Canvas元素。其实,Canvas又称为“画布”,是HTML5的核心技术之一。我们常说的Canvas技术,指的就是使用Canvas元素结合Javascript来绘制各种图形的技术。

既然Canvas是HTML5核心技术,那它都有哪些厉害之处呢?

1.绘制图形

Canvas可以用来绘制各种基本图形如矩形、曲线、圆等,也可以绘制各种复杂绚丽的图形,如图1-1所示。

image

2.绘制图表

很多公司业务的数据展示都离不开图表,使用Canvas可以用来绘制满足各种需求的图表,如图1-2所示。

image

3.动画效果

使用Canvas,我们也可以制作出各种华丽的动画效果,这也是Canvas为大家带来的一大乐趣,如图1-3所示。

image

4.游戏开发

游戏开发在HTML5领域具有举足轻重的地位,现在我们也可以使用Canvas来开发各种游戏,如图1-4所示。这几年非常火的游戏如围住神经猫等,就是使用HTML5 Canvas来开发的。

image


此外,Canvas技术是一门纯JavaScript操作的技术,因此大家需要具备JavaScript入门知识。对于JavaScript的学习,可以关注绿叶学习网(www.lvyestudy.com)中的开源教程。

1.1.2 Canvas与SVG

HTML5有两个主要的2D图形技术:Canvas和SVG。事实上,Canvas和SVG是两门完全不同的技术。两者具有以下区别。

(1)Canvas是使用JavaScript动态生成的,SVG是使用XML静态描述的。

(2)Canvas是基于“位图”的,适用于像素处理和动态渲染,图形放大会影响质量。SVG是基于“矢量”的,不适用于像素处理和静态描述,图形放大不会影响质量。也就是说,使用Canvas绘制出来的是一个“位图”,而使用SVG绘制出来的是一个“矢量图”。如图1-5和图1-6所示。

image


(3)每次发生修改,Canvas需要重绘,而SVG不需要重绘。

(4)Canvas与SVG的关系,简单来说,就像“美术与几何”的关系一样。

此外,并非Canvas就比SVG更有前途,也并非SVG就比Canvas更有前途,因为这两个是用于不同场合的。在实际开发中,我们应该根据开发需求去选择。

当然,这里只是简单介绍了一下Canvas与SVG的区别,如果想真正了解,我们还需要深入学习这两门技术。最后给大家一个小小的建议:很多人接触新技术的时候,喜欢在第一遍学习中就把每一个细节都弄清楚,事实上这是效率最低的学习方法。在第一遍学习中,如果有些东西实在没办法理解,那就直接跳过,等到学到后面或者看第二遍的时候,自然而然就懂了。

1.2 Canvas元素知识

HTML5 Canvas,简单来说,就是一门使用JavaScript来操作Canvas元素的技术。使用Canvas元素来绘制图形,需要以下三步。

(1)获取canvas对象。

(2)获取上下文环境对象context。

(3)开始绘制图形。
举例:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title></title>
  <meta charset="utf-8" />
  <script type="text/javascript">
    window.onload = function () {
      //1、获取canvas对象
      var cnv = document.getElementById("canvas");
      //2、获取上下文环境对象context
      var cxt = cnv.getContext("2d");
      //3、开始绘制图形
      cxt.moveTo(50, 100);
      cxt.lineTo(150, 50);
      cxt.stroke();
    }
  </script>
</head>
<body>
  <canvas id="canvas" width="200" height="150" style="border:1px dashed gray;"></canvas>
</body>
</html>

在浏览器中的预览效果如图1-7所示。

image


分析:
在Canvas中,我们首先使用document.getElementById()方法来获取canvas对象(这是一个DOM对象),然后使用canvas对象的getContext("2d")方法获取上下文环境对象context,最后再使用context对象的属性和方法来绘制各种图形。

1.2.1 Canvas元素

Canvas是一个行内块元素(即inline-block),我们一般需要指定其三个属性:id、width和height。width和height分别定义Canvas的宽度和高度。默认情况下,Canvas的宽度为300px,高度为150px。

对于Canvas的宽度和高度,有两种方法来定义:①在HTML属性中定义;②在CSS样式中定义。但是在实际开发中,我们一定不要在CSS样式中定义,而是应该在HTML属性中定义。为什么呢?下面先来看一个例子。

举例:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title></title>
  <meta charset="utf-8" />
  <style type="text/css">
    canvas
    {
      width:200px;
      height:150px;
    }
  </style>
  <script type="text/javascript">
    window.onload = function () {
      var cnv = document.getElementById("canvas");
      var str = "canvas的宽度为:" + cnv.width + ",高度为:" + cnv.height; 
      alert(str);
    }
  </script>
</head>
<body>
  <canvas id="canvas" style="border:1px dashed gray;"></canvas>
</body>
</html>

在浏览器中的预览效果如图1-8所示。

image


分析:
从这个例子可以看出:如果在CSS样式中定义,我们使用canvas对象获取的宽度和高度是默认值,而不是实际的宽度和高度。这样就无法获取canvas对象正确的宽度和高度。获取canvas对象实际的宽度和高度是Canvas开发中最常用的操作,因此对于Canvas的宽度和高度我们就一定要在HTML属性中定义,而不是在CSS属性中定义。

1.2.2 Canvas对象

在Canvas中,我们可以使用document.getElementById()方法来获取canvas对象。canvas对象常用的属性和方法如下:

image


也就是说,我们可以使用cnv.width和cnv.height分别获取Canvas的宽度和高度,可以使用cnv.getContext("2d")来获取canvas 2D上下文环境对象,也可以使用toDataURL()来获取canvas对象产生的位图的字符串。在这里,cnv是指canvas对象。

对于toDataURL()方法,我们可以暂时不去深入,在后面章节中会详细给大家介绍。这里我们只要认真学习一下getContext("2d")方法就可以了。在Canvas中,我们使用getContext("2d")来获取Canvas 2D上下文环境对象,这个对象又称为context对象。后面章节接触的所有图形的绘制,使用的都是context对象的属性和方法,这一点需要特别清楚。当然现在不理解没关系,学到后面再回过头来看看这段话就懂了。

举例:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title></title>
  <meta charset="utf-8" />
  <script type="text/javascript">
    window.onload = function () {
      var cnv = document.getElementById("canvas");
      var str = "Canvas的宽度为:" + cnv.width + ",高度为:" + cnv.height; 
      alert(str);
    }
  </script>
</head>
<body>
  <canvas id="canvas" width="200" height="160" style="border:1px dashed gray"></canvas>
</body>
</html>

在浏览器中的预览效果如图1-9所示。

image


本节要特别注意一点:以后学习的所有图形的绘制,我们使用的都是context对象(上下文环境对象)的属性和方法。

相关文章
|
16天前
|
前端开发 JavaScript 关系型数据库
从前端到后端:构建现代化Web应用的技术探索
在当今互联网时代,Web应用的开发已成为了各行各业不可或缺的一部分。从前端到后端,这篇文章将带你深入探索如何构建现代化的Web应用。我们将介绍多种技术,包括前端开发、后端开发以及各种编程语言(如Java、Python、C、PHP、Go)和数据库,帮助你了解如何利用这些技术构建出高效、安全和可扩展的Web应用。
|
17天前
|
编解码 前端开发 JavaScript
Web 前端开发中的最佳实践
本文将介绍 Web 前端开发中的最佳实践,包括代码组织、性能优化、响应式设计和用户体验等方面。通过遵循这些实践,开发人员可以提高开发效率,优化用户体验,并减少潜在的问题和错误。
|
1天前
|
设计模式 存储 前端开发
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
|
7天前
|
JSON Java fastjson
Spring Boot 底层级探索系列 04 - Web 开发(2)
Spring Boot 底层级探索系列 04 - Web 开发(2)
15 0
|
7天前
|
安全 编译器 PHP
PHP 8.1版本发布:引领Web开发新潮流
PHP编程语言一直是Web开发的主力军,而最新发布的PHP 8.1版本则为开发者们带来了更多创新和便利。本文将介绍PHP 8.1版本的主要特性,包括更快的性能、新的语言功能和增强的安全性,以及如何利用这些功能来提升Web应用程序的质量和效率。
|
10天前
|
前端开发 搜索推荐 数据安全/隐私保护
HTML标签详解 HTML5+CSS3+移动web 前端开发入门笔记(四)
HTML标签详解 HTML5+CSS3+移动web 前端开发入门笔记(四)
18 1
|
10天前
|
PHP
web简易开发——通过php与HTML+css+mysql实现用户的登录,注册
web简易开发——通过php与HTML+css+mysql实现用户的登录,注册
|
10天前
|
前端开发 数据挖掘 API
使用Python中的Flask框架进行Web应用开发
【4月更文挑战第15天】在Python的Web开发领域,Flask是一个备受欢迎的轻量级Web框架。它简洁、灵活且易于扩展,使得开发者能够快速地构建出高质量的Web应用。本文将深入探讨Flask框架的核心特性、使用方法以及在实际开发中的应用。
|
10天前
|
前端开发 JavaScript vr&ar
前端新技术探索:WebAssembly、Web Components与WebVR/AR
【4月更文挑战第12天】WebAssembly、Web Components和WebVR/AR正重塑Web应用的未来。WebAssembly允许C/C++等语言在Web上高效运行,提供接近原生的性能,如游戏引擎。Web Components通过Custom Elements和Shadow DOM实现可复用的自定义UI组件,提升模块化开发。WebVR/AR(现WebXR)则让VR/AR体验无需额外应用,直接在浏览器中实现。掌握这些技术对前端开发者至关重要。
16 3
|
13天前
|
小程序 前端开发 JavaScript
小程序全栈开发:前端与后端的完美结合
【4月更文挑战第12天】本文介绍了小程序全栈开发,涵盖前端和后端的关键点。前端使用WXML和WXSS进行页面结构和样式设计,JavaScript处理逻辑及组件使用;后端采用Node.js等语言处理业务逻辑、数据库设计和API接口开发。前端与后端通过数据交互实现结合,采用前后端分离模式,支持跨平台运行。调试测试后,提交微信审核并上线运营。掌握前端后端结合是小程序成功的关键。