canvas

canvas

利用canvas创建一个画布

一个画布在网页中是一个矩形框,通过 <canvas> 元素来绘制.

默认情况下 <canvas> 元素没有边框和内容。

<canvas>的简单实例如下:

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

以上代码创建了一个200*100像素的矩形画布

为它添加一个边框,让我们看见他:

<canvas id="myCanvas" width="200" height="100" style="border:1px solid #000000;">
</canvas>

效果如下:

使用JS绘制canvas

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

var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
ctx.fillStyle="#FF0000";
ctx.fillRect(0,0,150,75);

实例解析:

第一步:找到 <canvas> 元素:

var c=document.getElementById("myCanvas");

第二步:创建 context 对象:

var ctx=c.getContext("2d");

getContext("2d") 对象是内建的 HTML5 对象,拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。

第三步:使用下面的两行代码绘制一个红色的矩形:

ctx.fillStyle="#FF0000";
ctx.fillRect(0,0,150,75);

设置fillStyle属性可以是CSS颜色,渐变,或图案。fillStyle 默认设置是#000000(黑色)。

fillRect(x,y,width,height) 方法定义了矩形当前的填充方式。

canvas坐标

canvas 是一个二维网格。

canvas 的左上角坐标为 (0,0)

上面的 fillRect 方法拥有参数 (0,0,150,75)。

意思是:在画布上绘制 150x75 的矩形,从左上角开始 (0,0)。

canvas路径

在Canvas上画线,我们将使用以下两种方法:

  • moveTo(x,y) 定义线条开始坐标
  • lineTo(x,y) 定义线条结束坐标

绘制线条我们必须使用到 "ink" 的方法,就像stroke().

定义开始坐标(0,0), 和结束坐标 (200,100)。然后使用 stroke() 方法来绘制线条:

var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
ctx.moveTo(0,0);
ctx.lineTo(200,100);
ctx.stroke();

在canvas中绘制圆形, 我们将使用以下方法:

var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
ctx.beginPath();
ctx.arc(95,50,40,0,2*Math.PI);
ctx.stroke();

canvas文本

使用 canvas 绘制文本,重要的属性和方法如下:

  • font - 定义字体
  • fillText(text,x,y) - 在 canvas 上绘制实心的文本
  • strokeText(text,x,y) - 在 canvas 上绘制空心的文本

使用 fillText():

var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
ctx.font="30px Arial";
ctx.fillText("Hello World",10,50);

使用strokeText():

var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
ctx.font="30px Arial";
ctx.strokeText("Hello World",10,50);

canvas渐变

渐变可以填充在矩形, 圆形, 线条, 文本等等, 各种形状可以自己定义不同的颜色

以下有两种不同的方式来设置Canvas渐变:

  • createLinearGradient(x,y,x1,y1) - 创建线条渐变
  • createRadialGradient(x,y,r,x1,y1,r1) - 创建一个径向/圆渐变

当我们使用渐变对象,必须使用两种或两种以上的停止颜色

addColorStop()方法指定颜色停止,参数使用坐标来描述,可以是0至1.

使用渐变,设置fillStyle或strokeStyle的值为 渐变,然后绘制形状,如矩形,文本,或一条线。

使用 createLinearGradient():

var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");

// 创建渐变
var grd=ctx.createLinearGradient(0,0,200,0);
grd.addColorStop(0,"red");
grd.addColorStop(1,"white");

// 填充渐变
ctx.fillStyle=grd;
ctx.fillRect(10,10,150,80);

使用 createRadialGradient():

var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");

// 创建渐变
var grd=ctx.createRadialGradient(75,50,5,90,60,100);
grd.addColorStop(0,"red");
grd.addColorStop(1,"white");

// 填充渐变
ctx.fillStyle=grd;
ctx.fillRect(10,10,150,80);
(0)

相关推荐

  • JavaScript图形实例:Hilbert曲线

    德国数学家David Hilbert在1891年构造了一种曲线,首先把一个正方形等分成四个小正方形,依次从西北角的正方形中心出发往南到西南正方形中心,再往东到东南角的正方形中心,再往北到东北角正方形中 ...

  • JavaScript图形实例:随机SierPinski三角形

    在"JavaScript图形实例:SierPinski三角形"中,我们介绍了SierPinski三角形的基本绘制方法,在"JavaScript图形实例:迭代函数系统生成图 ...

  • JavaScript动画实例:炸开的小球

    JavaScript动画实例:炸开的小球

  • JavaScript图形实例:Levy曲线及其变形

    Levy曲线是将一条线段不停地分形成两条长度相等且相互垂直的线段而生成的.Levy分形的最后很像一个英文字母C,所以也称它为C曲线. Levy曲线的生成示意如图1所示. 图1  Levy曲线的生成 1 ...

  • JavaScript图形实例:SierPinski三角形

    JavaScript图形实例:SierPinski三角形

  • JavaScript动画实例:曲线的绘制

    在"JavaScript图形实例:曲线方程"一文中,我们给出了15个曲线方程绘制图形的实例.这些曲线都是根据其曲线方程,在[0,2π]区间取一系列角度值,根据给定角度值计算对应的各 ...

  • 你还在为搞不懂商业模式而苦恼吗?Business Model Canvas(商业模式画布)轻松帮你搞定!

    本文来自First Round Review,他们准备的文章既讲故事,还同时向创业者提供可操作的建议,以助力打造优秀的公司. 精益创业一词已经广为人知.然而,其背后的哲学则来自于作家兼创业者Alexa ...

  • Python tkinter Canvas画布完全攻略

    编辑推荐: 本文主要介绍如何用Canvas 组件来实现绘图,绘制方法使用程序来进行演示,希望对大家有帮助. 本文来自于C语言中文网 ,由火龙果软件Alice编辑,推荐. Tkinter 提供了 Can ...

  • [html] 第114天 举例说明HTML5的Canvas元素有什么用途?

    今日试题: 举例说明HTML5的Canvas元素有什么用途? 此开源项目四大宗旨:勤思考,多动手,善总结,能坚持 <论语>,曾子曰:"吾日三省吾身"(我每天多次反省自己 ...

  • 跨平台Web Canvas渲染引擎架构的设计与思考

    楚奕阿里技术 这篇文章主要从技术视角介绍下跨平台WebCanvas的架构设计以及一些关键模块的实现方案(以Android为主),限于作者水平,有不准确的地方欢迎指正或者讨论. 一  设计目标 标准化: ...

  • 微信小程序分享19:canvas画布

    canvas画布 index.wxml: canvas有了id,用于标识是屏幕上的哪一块画布. 绘制是调用的微信的接口: 小程序其它控制获取数据或动作,都是以绑定的方式,只有canvas画布是需要主动 ...

  • 工具|Immunity Canvas安装踩坑、简单使用及虚拟机

    首先上效果图 0x01 安装 刚开始使用Windows10安装的,包括缺少依赖.中文.无法弹窗等问题,没办法,之后转向Ubuntu16进行安装,中间也遇到了各种问题,简要写一下几个坑 Q1:pip版本 ...

  • canvas多重阴影发光效果

    阴影 有的人可能会说,这个用阴影其实就可以实现.但是从图中可以看出,是一个比较强烈的发光效果.实际的应用过程中我们会发现用简单阴影参数实现的效果很难达到这样强烈的发光效果. 比如 ctx.shadow ...

  • uni-app通过canvas实现手写签名

    分享一个uni-app实现手写签名的方法 具体代码如下: <template> <view > <view class="title">请在下面 ...

  • 16个非常有趣的HTML5 Canvas动画特效集合

    HTML5技术正在不断的发展和更新,越来越多的开发者也正在加入HTML5阵营,甚至在移动开发上HTML5的地位也是越来越重要了.HTML5中的大部分动画都是通过Canvas实现,因为Canvas就像一 ...