神奇且强大的canvas

一、canvas简介

1.1什么是canvas?

是HTML5提供的一种新标签,ie9才开始支持的

<canvas></canvas>

  英 [‘k?nv?s] 美 [‘k?nv?s] 帆布 画布

canvas是一个矩形区域的画布,可以用JS控制每一个像素在上面绘画。

canvas标签使用JavaScript在网页上绘制图像,本身不具备绘图功能。

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

1.2canvas主要应用的领域

1可视化数据:各类统计图表,比如:百度的echart

2场景秀:用canvas实现动态的广告效果能够非常融洽的跨平台运行。如:手机中的微产品。在移动端兼容性很好

3游戏:canvas在基于Web的图像显示方面比Flash更加立体、更加精巧,canvas成为HTML5小游戏开发首选。现阶段h5做游戏,营业方式不是很明确。

4其他可嵌入网站的内容(多用于活动页面、特效):类似图表、音频、视频,还有许多元素能够更好地与Web融合,并且不需要任何插件。

5趋势=>模拟器:无论从视觉效果还是核心功能方面来说,模拟器产品可以完全由JavaScript来实现。模拟真实硬件环境,如移动端各种类型手机。

6趋势=>远程计算机控制:canvas可以让开发者更好地实现基于Web的数据传输,构建一个完美的可视化控制界面。

7趋势=>图形编辑器:Photoshop图形编辑器将能够100%基于Web实现。

二、canvas绘制线条

2.1canvas标签语法和属性

canvas:画布油布的意思

标签名:canvas,双标签,需要闭合

单位:px,可以设置width和height属性,否则忽略单位。

width和height:默认300*150像素

注意:

不要用CSS控制它的宽和高,会导致内部图片被拉伸;

重新设置canvas标签的宽高属性会让画布擦除所有的内容;

可以给canvas画布设置背景色。

2.2浏览器不兼容处理

ie9以上才支持canvas,其他chrome、Safari、Opera都支持

只要浏览器兼容canvas,那么就会支持绝大部分API(个别最新API除外)

移动设备几乎支持canvas的所有API

2d的支持的都非常好,3d(webgl)ie11才支持,其他都支持

如果浏览器不兼容,最好进行友好提示,例如:

<canvas id="canvas">

你的浏览器不支持canvas,请升级浏览器。

</canvas>

如果浏览器不兼容,可以使用flash等方式进行替换。

2.3canvas绘图上下文context

context:canvas的上下文、绘制环境

上下文:是所有的绘制操作API的入口或者集合

canvas自身无法绘制任何内容,canvas的绘图是使用JS调用canvas的接口来完成的

context对象就是JavaScript操作canvas的接口

使用[CanvasElement].getContext(‘2d‘)来获取2d绘图上下文。

//获得画布

var canvas = document.getElementById(‘cavsElem‘);

//注意:2d小写,二维,3d:webgl

var ctx = canvas。getContext(‘2d‘);

三 基本的绘制路径

3.1canvas坐标系

canvas坐标系,从最左上角0,0开始。x向右增大,y向下增大

3.2 设置绘制起点(moveTo)

语法:ctx.moveTo(x,y);

解释:设置上下文绘制路径的起点。相当于移动画笔到某个位置

参数:x,y都是相对于canvas盒子的最左上角

注意:绘制线段前必须先设置起点,不然绘制无效

3.3绘制直线(lineTo)

语法:ctx.lineTo(x,y);

解释:从x,y的位置绘制一条直线到起点或者上一个线头点

参数:x,y线头点坐标

3.4路径开始和闭合

开始路径:ctx.beginPath();

闭合路径:ctx.closePath();

解释:如果复杂路径绘制,必须使用路径开始和结束

closePath:闭合路径会自动把最后的线头和开始的线头连在一起

beginPath:核心的作用是将不同绘制的形状进行隔离,每次执行此方法,表示重新绘制一个路径,跟之前的绘制的路径可以进行分开样式设置和管理

3.5描边(stroke)

语法:ctx.stroke();

解释:根据路径绘制线。路径知识草稿,真正绘制线必须执行stroke

stroke:(用笔等)画;轻抚;轻挪;敲击;划尾浆;划掉;(打字时)击打键盘 英 [str??k] 美 [strok]

canvas绘制的基本步骤:

第一步:获得上下文=>canvasElem.getContext(‘2d‘);

第二步:开始路径规划=>ctx.beginPath()

第三步:移动起始点=>ctr.moveTo(x,y)

第四步:绘制(点、线、面、图片……)=>ctx.lineTo(x,y)

第五步:闭合路径=>ctx.closePath();

第六步:绘制描边=>ctx.stroke();

html部分:
<canvas id="canvas">
当前浏览器不支持canvas,请升级浏览器版本
</canvas>

javascript部分:

//===============基本绘制api====================
//获得画布
var canvas = document.querySelector(‘#canvas‘);
//获得上下文
var ctx = canvas.getContext(‘2d‘);

canvas.width = 800;     //设置标签的属性宽高
canvas.height = 600;
canvas.style.border = "1px solid #000";

//绘制三角形
ctx.beginPath();        //开始路径
ctx.moveTo(100,100);    //三角形,左顶点
ctx.lineTo(300, 100);   //右顶点
ctx.lineTo(300, 300);   //底部的点
ctx.closePath();        //结束路径
ctx.stroke();           //描边路径

四、canvas绘制矩形

1快速创建矩形rect()方法

语法:ctx.rect(x,y,width,height);

解释:x,y是矩形左上角坐标,width和height都是以像素计算

rect方法只是规划了矩形的路径,并没有填充和描边。

rect:abbr.矩形(rectangular);收据(receipt)

2快速创建描边矩形和填充矩形

语法:ctx.strokeRect(x,y,width,height);

参数跟ctx.rect相同,注意此方法绘制完路径后立即进行stroke绘制

语法:ctx.fillRect(x,y,width,height);

参数跟ctx.rect相同,此方法执行完成后。立即对当前矩形进行fill填充

3清除矩形(clearRect)

语法:ctx.rect(x,y,width,height);

解释:清除某个矩形内的绘制的内容,相当于橡皮擦

五、canvas绘制

绘制圆形(arc)

概述:arc()方法创建弧/曲线(用于创建圆或部分圆)

语法:ctx.arc()(x,y,sAngle,eAngle,counterclockwise);

arc:弧(度)弧形物;天穹

counter 反击,还击;反向移动,对着干;反驳。

解释:

x,y:圆心坐标

r:半径大小

sAngle:绘制开始的角度。圆心到最右边点是0度,顺时针方向弧度增大。

eAngle:结束的角度,注意是弧度。

counterclockwise:是否是逆时针。true是逆时针,false:顺时针(默认)

弧度和角度的转换公式:rad = deg*Math.PI/180;

在Math提供的方法中sin、cos等都是用的弧度

三角函数的补充

Math.sin(弧度)//夹角对面的边和斜边的比值

Math.cos(弧度)//夹角侧边与斜边的比值

圆形上面的点的坐标的计算公式

x = x0 + Math.cos(rad)*R;//x0和y0是圆心点坐标

y = y0 + Math.sin(rad)*R;//注意都是弧度

时间: 2024-07-30 13:46:55

神奇且强大的canvas的相关文章

强大的&lt;canvas&gt;

<canvas> 个人认为<canvas>是h5最重量级的新标签了,现在各种h5小游戏都是基于<canvas>的,它为游戏提供了一个功能强大的画布,可在画布上绘制丰富的内容,同时也催生出很多游戏引擎.现在就简单介绍一下<canvas>的一些基本绘图和图片处理功能: 1.绘制线条 绘图的基本步骤是:先用getContext("2d")获取二维绘图环境上下文,有二维那肯定也有三位了?是的,三维就要用到WebGL了,技术水平有限,今天就不讨论三

自定义View(二),强大的Canvas

本文转自:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2012/1212/703.html Android中使用图形处理引擎,2D部分是android SDK内部自己提供,3D部分是用Open GL ES 1.0.今天我们主要要了解的是2D相关的,如果你想看3D的话那么可以跳过这篇文章. 大部分2D使用的api都在android.graphics和android.graphics.drawable包中.他们提供了图形处理相关的: C

Canvas 画布小案例

<script> window.onload = function () { draw('canvas1'); draw('canvas2'); draw('canvas3'); draw('canvas4'); draw('canvas5'); draw('canvas6'); draw('canvas7'); draw('canvas8'); draw('canvas9'); }; function draw(id) { var canvas = document.getElementBy

基于HTML5 Canvas和jQuery 的画图工具的实现

简介 HTML5 提供了强大的Canvas元素,使用Canvas并结合Javascript 可以实现一些非常强大的功能.本文就介绍一下基于HTML5 Canvas 的画图工具的实现.废话少说,先看成品: 该应用是遵循所见即所得(WYSIWYG, What you see is what you get)原则设计的,它具有以下功能: 1. 可以绘制自由曲线.直线.矩形框和文字: 2. 可以根据需要定义线段和矩形框的颜色和宽度: 3. 你可以需要字体的大小.颜色.字体: 4. 支持undo.redo

前端交互开发微体验--总结了一些国内外炫酷的网站

前端交互开发微体验 关于首屏灵动小效果,微交互提升页面生机: 一.关于首屏视频播放 http://designmodo.com/startup/ 感官体验:科技感,高大上,酷 综合评价:如页面请求不多且视频占空小的情况下使用.一般为首屏轮播图的情况下使用,前两张轮播为图片,最后为视频,多给视频一些加载时间.还有就是非首屏使用. 推荐指数:★★★☆☆     二.Hover时实现图片随着鼠标方向而变动 http://atieva.com/ https://labs.invisionapp.com/

ruby之入门(一)

前言 这门语言很少去听过,可能是没怎么用到就不会听到太多关于ruby的消息,工作需要这门语言,需要从0开始学习这门语言,慢慢学习简直...太神奇了...,原谅我见识浅薄.原来很早就已经出世了,园子中也有大几年前别人写的ruby,貌似国内一直很少有人用这门脚本语言,加上现在更多的是倾向于python了,而我却未能搭上这趟及时车,又加之要学的东西太多,如果每个都是浅尝辄止则得不偿失.或许这门语言在以后中不太会用到或者涉及,也许对于以后学习python有帮助呢,收货的知识不怕多,就怕不学!关于ruby

动态规划---最长上升子序列问题(O(nlogn),O(n^2))

LIS(Longest Increasing Subsequence)最长上升子序列 或者 最长不下降子序列.很基础的题目,有两种算法,复杂度分别为O(n*logn)和O(n^2) . ********************************************************************************* 先回顾经典的O(n^2)的动态规划算法: 设a[t]表示序列中的第t个数,dp[t]表示从1到t这一段中以t结尾的最长上升子序列的长度,初始时设dp[

HTML5 学习笔记(一)——HTML5概要与新增标签

一.HTML5概要 1.1.为什么需要HTML5 HTML4陈旧不能满足日益发展的互联网需要,特别是移动互联网.为了增强浏览器功能Flash被广泛使用,但安全与稳定堪忧,不适合在移动端使用(耗电.触摸.不开放). HTML5增强了浏览器的原生功能,符合HTML5规范的浏览器功能将更加强大,减少了Web应用对插件的依赖,让用户体验更好,让开发更加方便,另外W3C从推出HTML4.0到5.0之间共经历了17年,HTML的变化很小,这并不符合一个好产品的演进规则. 1.2.什么是HTML5 HTML5

HTML5 学习总结(一)——HTML5概要与新增标签

目录 一.HTML5概要 1.1.为什么需要HTML5 1.2.什么是HTML5 1.3.HTML5现状及浏览器支持 1.4.HTML5特性 1.5.HTML5优点与缺点 1.5.1.优点 1.5.2.缺点 1.6.HTML5效果展示 1.7.HTML5学习与开发工具 1.7.1.基础要求 1.7.2.开发工具 1.8.HTML5语法规则与文档声明 1.8.1.语法规则 1.8.2.文档声明 1.8.2.文档声明 二.废弃的标签 三.新增的标签 3.1.新增的结构标签 3.2.新增加其它元素 3