介绍

传统的HTML主要用于文本的创建,可以通过<img>标签插入图像,动画的实现则需要第三方插件。在这方面,传统的HTML极其缺乏满足现代网页多媒体需求的能力。HTML5的到来,带来了新的成员<canvas>标签。

什么是 Canvas?

HTML5 的 Canvas 元素使用 JavaScript 在网页上绘制图像。

画布是一个矩形区域,你可以控制其每一像素。

canvas 拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。

创建 Canvas 元素

向 HTML5 页面添加 Canvas 元素。

规定元素的 id、宽度和高度:

<canvas id="myCanvas" width="200" height="100"></canvas>

通过 JavaScript 来绘制

Canvas 元素本身是没有绘图能力的。所有的绘制工作必须在 JavaScript 内部完成:

<script type="text/javascript">
var c=document.getElementById("myCanvas");
var cxt=c.getContext("2d");
cxt.fillStyle="#FF0000";
cxt.fillRect(0,0,150,75);
</script>
  • 首先,JavaScript 使用 id 来寻找 Canvas 元素:

    var c=document.getElementById("myCanvas");
  • 其次,创建 context 对象:
    var cxt=c.getContext("2d"); 
  • 然后,getContext("2d") 对象是内建的 HTML5 对象,拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。下面的两行代码绘制一个红色的矩形:
    cxt.fillStyle="#FF0000";
    cxt.fillRect(0,0,150,75);
  • 最后,使用fillStyle 方法,可将其染成红色,fillRect 方法规定了形状、位置和尺寸。

绘图方法:

  • 线条以及填充

    • moveTo()方法使用X和Y作为参数,在 Canvas 上设置参数指定的线条起始点。
    • lineTo()方法使用X和Y作为参数,在 Canvas 上创建上一个点到参数指定点的路径。
    • stroke()方法绘制出了 Canvas 上,moveTo()指定的点到 lineTo()指定点的路径线条。stroke()方法没有参数。
    • beginPath()方法用于开始一个新路径或重置当前路径,没有参数。
    • closePath()方法用于创建从起始点到终点的路径,有效的闭合并形成路径的形状,没有参数。
    • fill()方法用于为当前的路径填充样式。

JavaScript 代码:

<script type="text/javascript">
var canvas = document.getElementById("mycanvas");
var context = canvas.getContext("2d");
context.moveTo(250,50);
context.lineTo(150,100);
context.lineTo(250,150);
context.closePath();
context.stroke();
context.fill();
</script>

  • 文本

HTML5 提供了3个属性 font、textAlign 和 textBaseline,用于定义 Canvas 上文本的不同状态。

    • font 属性设置或获取字体属性,如字体样式、字重、字体大小和字体系列等。它遵循和 CSS 字体属性相同的语法。
    • textAlign 属性设置或获取文本内容的水平对齐方式。textAlign 可以设置成5个值:"start",  "end",  "right",  "left" 和 "center"
    • textBaseline 属性设置或获取文本内容的垂直对齐方式。textBaseline 可以设置成5个值:"top",  "bottom",  "middle",  "aplhabetic" 和 "hanging"。
  • 渐变

    • strokeStyle 属性设置或获取 Canvas 上用于绘制路径的颜色、渐变和图案。
    • createLinearGradient()方法通过将对象以值的形式分配给 strokeStyle 或者相关图形的填充属性,用于创建填充举行,圆形,线条和文本的渐变对象。

createLinearGradient有4个参数:

      • 起点的X坐标
      • 起点的Y坐标
      • 终点的X坐标
      • 终点的Y坐标
    • createLinearGradient()方法必须与 addColorStop()方法一起使用,来指定渐变对象中的不同颜色和相对的位置。
    • addColorStop()方法指定了渐变对象的颜色和位置。

addColorStop()有2个参数:

      • 一个0.0到1.0之间的值,代表渐变中开始点和结束点的位置。
      • 该点位置的颜色

JavaScript 代码:

<script type="text/javascript">
var canvas=document.getElementById('mycanvas');
var context=canvas.getContext('2d');
var gradient=context.createLinearGradient(50,30,50,170);
gradient.addColorStop(0,"red");
gradient.addColorStop("0.1","orange");
gradient.addColorStop("0.3","yellow");
gradient.addColorStop("0.5","green");
gradient.addColorStop("0.7","blue");
gradient.addColorStop("0.9","indigo");
gradient.addColorStop(1,"violet");
context.fillStyle=gradient;
context.fillRect(50,30,250,140);
</script>

  • 图片

    • DrawImage()方法用于绘制输入的图像,视频等到 Canvas 上。

DrawImage()方法有4个参数:

      • 放置图像的X坐标
      • 放置图像的Y坐标
      • 图像的宽度
      • 图像的高度
    • getImageData()方法通过从 Canvas 上指定的矩形里拷贝像素数据,来创建一个图形数据对象。

getImageData()方法有4个参数:

      • 复制的矩形左上角X坐标
      • 复制的矩形左上角Y坐标
      • 复制矩形的宽度
      • 复制矩形的高度
    • putImageData()方法用于将指定图像的像素数据放回到 Canvas 上来。

putImageData()方法有7个参数:

      • ImageData 对象
      • ImageData 对象左上角的x坐标
      • ImageData 对象左上角的Y坐标
      • 放置图像的X坐标
      • 放置图像的Y坐标
      • 绘制图像的宽度
      • 绘制图像的高度

本系列 HTML5 / CSS3 的知识介绍已经全部结束了,希望对学习 HTML5 / CSS3 的朋友有所帮助。

相关阅读:

开放才能进步!Angular和Wijmo一起走过的日子

Angular vs React 最全面深入对比

Wijmo已率先支持Angular4 & TypeScript 2.2

HTML5 & CSS3初学者指南(4) – Canvas使用的更多相关文章

  1. HTML5 & CSS3 初学者指南(4) – Canvas使用

    介绍 传统的HTML主要用于文本的创建,可以通过<img>标签插入图像,动画的实现则需要第三方插件.在这方面,传统的HTML极其缺乏满足现代网页多媒体需求的能力.HTML5的到来,带来了新 ...

  2. HTML5 & CSS3初学者指南(2) – 样式化第一个网页

    介绍 我们已经使用基本的 HTML 编写了一个网页.但是,写出来的 HTML 代码的网页看起来很平淡,没有吸引力. 如何改善这种很平淡的页面呢? 让我们开始使用网页的基本样式来改善页面效果,我们将会使 ...

  3. HTML5 & CSS3初学者指南(1) – 编写第一行代码

    介绍 网络时代已经到来.现在对人们来说,每天上网冲浪已经成为一种最为常见的行为. 在网页浏览器中输入一段文本地址,就像http://www.codeproject.com,等待一下,网页就加载到浏览器 ...

  4. HTML5 & CSS3初学者指南(3) – HTML5新特性

    介绍 本文介绍了 HTML5 的一些新特性.主要包含以下几个方面: Web 存储 地理位置 拖放 服务器发送事件 Web存储 HTML5 Web 存储的设计与构想是一个更好的机制来存储客户端的网络数据 ...

  5. HTML5&amp;CSS3初学者指南

    介绍 网络时代已经到来.现在对人们来说,每天上网冲浪已经成为一种最为常见的行为. 一个典型的网页是由文本.图像和链接组成的.除去内容上的差异,不同网站的网页也具有不同的外观和感受,以实现在网络上建立自 ...

  6. html5+css3 权威指南阅读笔记(三)---表单及其它新增和改良元素

    一.新增元素及属性 1.表单内元素的form属性. html5: <form id="testForm"> <input type=text> </f ...

  7. HTML5+CSS3从入门到精通随书光盘 ISO 镜像视频教程​

    HTML5+CSS3从入门到精通(清华社“视频大讲堂”大系)通过基础知识+中小实例+综合案例的方式,讲述了用HTML5+ CSS3设计构建网站的必备知识,相对于权威指南.高级程序设计.开发指南同类图书 ...

  8. HTML5+CSS3从入门到精通 中文pdf版​

    HTML5+CSS3从入门到精通是通过基础知识+中小实例+综合案例的方式,讲述了用HTML5+ CSS3设计构建网站的必备知识,相对于专业指南.高级程序设计.开发指南同类图书,本书是一本适合快速入手的 ...

  9. 【Web前端HTML5&CSS3】03-字符实体与语义标签

    笔记来源:尚硅谷Web前端HTML5&CSS3初学者零基础入门全套完整版 目录 字符实体与语义标签 1. 字符实体 2. meta标签 3. 语义标签 4. 块元素与行内元素 块元素(bloc ...

随机推荐

  1. 告诉你,Spring Boot 真是个牛逼货!

    现在 Spring Boot 非常火,各种技术文章,各种付费教程,多如牛毛,可能还有些不知道 Spring Boot 的,那它到底是什么呢?有什么用?今天给大家详细介绍一下. Spring Boot ...

  2. mongo 让字段自增或自减

    查询语句 db.getCollection("A表").update( { id: 1 }, { $inc: { pid: 1} } ) 作用:根据条件让A表中的pid字段自增1 ...

  3. lazy_import源码解析(原创)

    参考链接: An approach to lazy importing in Python 3.7(这个是参考源) Python3.7中一种懒加载的方式(中文翻译) 原博客核心: 以前的两种惰性/延迟 ...

  4. odoo开发笔记--from视图隐藏顶部&tree视图保留

    场景描述: 开发过程中,有时候我们需要去除odoo自带的一些样式, 比如,form视图,要集成自定义的界面时,就希望把顶部的服务动作 和 分页按钮 隐藏掉. 处理方式: 分两种情况: 1. 保留顶部区 ...

  5. leetcode — minimum-path-sum

    /** * Source : https://oj.leetcode.com/problems/minimum-path-sum/ * * * Given a m x n grid filled wi ...

  6. 你不知道的Node.js性能优化,读了之后水平直线上升

    本文由云+社区发表 "当我第一次知道要这篇文章的时候,其实我是拒绝的,因为我觉得,你不能叫我写马上就写,我要有干货才行,写一些老生常谈的然后加上好多特技,那个 Node.js 性能啊好像 D ...

  7. Java BIO、NIO、AIO

    同步与异步 同步与异步的概念, 关注的是 消息通信机制 同步是指发出一个请求, 在没有得到结果之前该请求就不返回结果, 请求返回时, 也就得到结果了. 比如洗衣服, 把衣服放在洗衣机里, 没有洗好之前 ...

  8. python实战学习之matplotlib绘图

    matplotlib 是最流行的Python底层绘图库,主要做数据可视化图表 可以将数据可视化,能够更直观的呈现数据 matplotlib绘图基本要点 首先实现一个简单的绘图 # 导入pyplot f ...

  9. Perl包和模块(内容来自beginning perl)

    单文件版的perl程序只能用于构建较小的脚本程序.当代码规模较大时,应该遵循下面两条规则来构建程序.这样能将程序的各个部分按功能一个一个地细化,便于维护,也便于后续开发. 能复用的代码放进函数 能复用 ...

  10. 翻译:low_priority和high_priority(已提交到MariaDB官方手册)

    本文为mariadb官方手册:HIGH_PRIORITY and LOW_PRIORITY的译文. 原文:https://mariadb.com/kb/en/high_priority-and-low ...