有的时候我们打开一些网站,可以看到背景是闪烁的星空或者是有一些可以与鼠标交互的线条等等,此酷炫的效果就是用到了html5的canvas效果。

首先来认识一下h5新增的标签的写法<canvas></canvas>,简单的可以将其理解为一个画布,我们就是在这个画布上画出我们所要实现的静态的或者动态图案效果。

首先来学习静态demo:

1、先创建一个画布:

有些浏览器还不能支持<canvas>标签的,如果你的浏览器看到了<p>里面的文字说明她还不支持,你可以升级啦

<canvas id="canvas_demo" width="200" height="200">
  <p>你的浏览器部支持canvas</p>
</canvas>

如下图我们创建了一个画布,坐标一个x轴,一个y轴。原点在左上角。这点认识比较关键!importent

2、下面开始准备画画啦

  2.1、基本图形

var canvas_demo = document.getElementById('canvas_demo');
//判断浏览器是否支持canvas
if(canvas_demo.getContext){
  //canvas有2d和3d两个模式,我们先创建一个简单的2d
var ctx = canvas_demo.getContext('2d');
  //颜色
ctx.fillStyle = 'rgb(200,0,0)';
  //fillRect(x,y,width,height)在(x,y)坐标处创建一个宽width,长height的填充颜色的矩形图.
ctx.fillRect(,,,); ctx.fillStyle = 'rgba(0,0,200,0.5)';
ctx.fillRect(,,,);
  //clearRect(x,y,width,height)在(x,y)坐标处,将清出一个宽width和长height的矩形区域
ctx.clearRect(,,,); ctx.fillStyle = 'rgb(200,0,0)';
  //strockRect(x,y,width,height)在(x,y)坐标处,创建一个宽width,长height的矩形边框
ctx.strokeRect(,,,);
}else{
//...如果浏览器不支持canvas时执行的事件。
}

  从上面的例子中,我们简单的画出一些矩形图案。包括填充,边框,清除图画的常见方法。以后会慢慢多学习其他的线条,曲线等等稍微复杂的。

  既然是画图,那么我们必须搞清楚图画的坐标,起点,终点等关键信息,在以后的例子中会逐渐认识到他们的正确性。

  矩形是一个方正的图案,只需要给出坐标和尺寸,我们就可以绘制出来,但是一般我们需要绘制的可能是比较复杂的图案,这个时候,我们会采用Path方法绘制。从名称上很容易理解“Path”即路径:我们先用path绘制出我们

  需要的图形,再进行填充或者描边。总之,path就像画家手中的笔一样,可以绘制更多种类的图案。

  2.2、Path

  采用Path绘图的步骤非常容易理解:

  • 准备绘图
  • 绘制路径
  • 结束绘图
  • 处理(描边或者填充等)

  相应代码如下:

var canvas_path = document.getElementById('canvas_2d_path');
if(canvas_path.getContext){
var ctx= canvas_path.getContext('2d');
  //准备开始绘制Path
ctx.beginPath(); 
  //MoveTo(x,y)将起点移动至(x,y)坐标处 
ctx.moveTo(,);
  //lineTo(x,y)在当前坐标点与(x,y)之间画出一条直线
ctx.lineTo(,); //此句之后当前坐标点变成(100,75)
  //在当前坐标(100,75)与(100,25)之间画出一条直线
ctx.lineTo(,);//此句之后当前坐标点变为(100,25)
  //fill()填充当前路径
ctx.fill();

  Path绘制图案官方有个比较经典的笑脸的例子。

  代码如下:

  var canvas = document.getElementById('canvas');
if (canvas.getContext){
var ctx = canvas.getContext('2d'); //依然是熟悉的2d图案
  //准备开始绘制路径
ctx.beginPath(); 
  /***
  arc(x,y,r,s,e,a)在坐标(x,y)处a(true逆时针/false顺时针)绘制半径为r的起始角度为s,终点角度为e的圆形图案。
  需要理解的是起始角度和终点的角度,需要注意的是逆时针或者顺时针。
  简易方法:Math.PI = 180度 Math.PI*2 = 360度
  Tips:画圆的起点在左侧,在代码下方的图中所示
  ***/
ctx.arc(,,,,Math.PI*,true); // Outer circle 画好之后,此时当前坐标为(125,75)
//将当前坐标移动至(110,75)
ctx.moveTo(,);
ctx.arc(,,,,Math.PI,false); // Mouth (clockwise)
ctx.moveTo(,);
ctx.arc(,,,,Math.PI*,true); // Left eye
ctx.moveTo(,);
ctx.arc(,,,,Math.PI*,true); // Right eye
ctx.stroke();
}

画正常圆形的起点在下面所示的b点,逆时针绕一圈后终点也是在b点。如果不是规整的圆,可以以此推算起点和终点所在坐标。

在笑脸画图中,用到moveTo(x,y)函数。改变坐标的位置至下一个圆应该所在的坐标,这是非常重要的。如果不使用的话,每一个圆的终点与其下一个圆的起点中间都会有直线连接,如下图所示:

红色的线即是终点和起点之间连接。

以上,矩形和圆形的简单介绍。有兴趣的可以继续探讨多种曲线。

下一步可以准备画动态的图案啦啦~~

canvas初体验之基本线条的更多相关文章

  1. canvas初体验之加载图片

    上一篇的介绍主要是画一些基本的图案,这一篇主要是加载图案. canvas加载图片主要分为两个步骤: 1.获取图片资源. 2.将图片资源画到画布上. 1.1获取图片资源,canvasAPI为我们提供了多 ...

  2. 炫酷的时钟--canvas初体验

    先啥也不说:来张效果图 我是根据:http://www.imooc.com/learn/133 这里的课程进行学习的.大大的感谢liuyubobobo老师的深入浅出的讲解!! 我在这里仅仅提供我自己的 ...

  3. canvas初体验

    利用画布,绘制随机大小,颜色,位置 方框<!DOCTYPE html> <html lang="en"> <head> <meta cha ...

  4. Node.js 网页瘸腿爬虫初体验

    延续上一篇,想把自己博客的文档标题利用Node.js的request全提取出来,于是有了下面的初哥爬虫,水平有限,这只爬虫目前还有点瘸腿,请看官你指正了. // 内置http模块,提供了http服务器 ...

  5. .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验

    不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...

  6. Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验

    Mac OS 虚拟机安装方法 最近把自己的电脑升级了一下SSD固态硬盘,总算是有容量安装Mac 虚拟机了!经过心碎的安装探索,尝试了国内外的各种安装方法,最后在youtube上找到了一个好方法. 简单 ...

  7. Spring之初体验

                                     Spring之初体验 Spring是一个轻量级的Java Web开发框架,以IoC(Inverse of Control 控制反转)和 ...

  8. Xamarin.iOS开发初体验

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKwAAAA+CAIAAAA5/WfHAAAJrklEQVR4nO2c/VdTRxrH+wfdU84pW0

  9. 【腾讯Bugly干货分享】基于 Webpack & Vue & Vue-Router 的 SPA 初体验

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57d13a57132ff21c38110186 导语 最近这几年的前端圈子,由于 ...

随机推荐

  1. Git-仓库基本结构

    三 Git 仓库      1.1Git 基本概念    在Git中,我们将需要进行版本控制的文件目录叫做一个仓库(repository),每个仓库可以简单理解成一个目录,这个目录里面的所有文件都通过 ...

  2. EBS R12.2应用层关闭脚本的执行过程

    $ pwd /app/oracle/apps/VIS/fs1/inst/apps/VIS_erptest/admin/scripts $ ./adstpall.sh apps/apps You are ...

  3. angular懒加载机制 刷新后无法回退解决方案

    今天在项目中遇到一个很奇怪的问题,使用oclazyload来懒加载angular的模块,刷新页面后,单击回退按钮无法返回上一个页面.估计是使用懒加载机制销毁了angular内部的state关联,导致无 ...

  4. MongoDb 聚合报错

    聚合框架它是数据聚合的一个新框架,其概念类似于数据处理的管道. 每个文档通过一个由多个节点组成的管道,每个节点有自己特殊的功能(分组.过滤等),文档经过管道处理后,最后输出相应的结果. 管道基本的功能 ...

  5. Linux操作系统备份之一:使用LVM快照实现Linux操作系统数据的在线备份

    这里我们讨论Linux操作系统的备份. 在生产环境,客户都会要求做全系统的数据备份,用于系统崩溃后的一种恢复手段.这其中就包含操作系统数据的备份恢复. 由于是生产环境,客户都会要求备份不中断业务,也就 ...

  6. C语言 在VS环境下一个很有意思的报错:stack around the variable was corrupted

    今天做一个很简单的oj来温习下c 语言 题目如下 输入 3位正整数 输出 逆置后的正整数 代码如下: #include"stdio.h"int main(){ float h,su ...

  7. jacob 多个web项目报错 jacob-1.14.3-x64.dll already loaded in another classloader jacob

    多个web项目报错 jacob-1.14.3-x64.dll already loaded in another classloader jacob 这个问题困扰了很久,网上很多解决方案,很多都不成功 ...

  8. ms

    meanShift的概念最早是由Fukunage[1]在1975年提出的,其最初的含义正如其名:偏移的均值向量:但随着理论的发展,meanShift的含义已经发生了很多变化.如今,我们说的meanSh ...

  9. Ajax中dataType数据类型

    今天项目中使用Ajax向后台保存数据,其中dataType为'json';当请求成功后,没有走success回调,反而走了error:数据库已经成功保存数据了. 后来搞半天才知道原来dataType指 ...

  10. (8) 深入理解Java Class文件格式(七)

    转载:http://blog.csdn.net/zhangjg_blog/article/details/22091529 本专栏列前面的一系列博客, 对Class文件中的一部分数据项进行了介绍. 本 ...