canvas初体验之基本线条
有的时候我们打开一些网站,可以看到背景是闪烁的星空或者是有一些可以与鼠标交互的线条等等,此酷炫的效果就是用到了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初体验之基本线条的更多相关文章
- canvas初体验之加载图片
上一篇的介绍主要是画一些基本的图案,这一篇主要是加载图案. canvas加载图片主要分为两个步骤: 1.获取图片资源. 2.将图片资源画到画布上. 1.1获取图片资源,canvasAPI为我们提供了多 ...
- 炫酷的时钟--canvas初体验
先啥也不说:来张效果图 我是根据:http://www.imooc.com/learn/133 这里的课程进行学习的.大大的感谢liuyubobobo老师的深入浅出的讲解!! 我在这里仅仅提供我自己的 ...
- canvas初体验
利用画布,绘制随机大小,颜色,位置 方框<!DOCTYPE html> <html lang="en"> <head> <meta cha ...
- Node.js 网页瘸腿爬虫初体验
延续上一篇,想把自己博客的文档标题利用Node.js的request全提取出来,于是有了下面的初哥爬虫,水平有限,这只爬虫目前还有点瘸腿,请看官你指正了. // 内置http模块,提供了http服务器 ...
- .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...
- Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验
Mac OS 虚拟机安装方法 最近把自己的电脑升级了一下SSD固态硬盘,总算是有容量安装Mac 虚拟机了!经过心碎的安装探索,尝试了国内外的各种安装方法,最后在youtube上找到了一个好方法. 简单 ...
- Spring之初体验
Spring之初体验 Spring是一个轻量级的Java Web开发框架,以IoC(Inverse of Control 控制反转)和 ...
- Xamarin.iOS开发初体验
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKwAAAA+CAIAAAA5/WfHAAAJrklEQVR4nO2c/VdTRxrH+wfdU84pW0
- 【腾讯Bugly干货分享】基于 Webpack & Vue & Vue-Router 的 SPA 初体验
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57d13a57132ff21c38110186 导语 最近这几年的前端圈子,由于 ...
随机推荐
- jdk环境变量
exportJAVA_HOME=/opt/jdk1.8.0_92 exportJRE_HOME=${JAVA_HOME}/jre exportCLASSPATH=.:${JAVA_HOME}/li ...
- 多进程、协程、事件驱动及select poll epoll
目录 -多线程使用场景 -多进程 --简单的一个多进程例子 --进程间数据的交互实现方法 ---通过Queues和Pipe可以实现进程间数据的传递,但是不能实现数据的共享 ---Queues ---P ...
- xib自定义cell代码规范
// // MJTgCell.m // 01-团购 // // Created by apple on 14-4-1. // Copyright (c) 2014年 itcast. All r ...
- 获取手机通讯录--ios
- (void)test { //这个变量用于记录授权是否成功,即用户是否允许我们访问通讯录 int __block tip=0; //声明一个通讯簿的引用 ABAdd ...
- AJAX-----06XMLHttpRequest对象的处理返回的XML类型数据
我们首先要确保XML文件是否正常执行 如果访问时候报类似 Parse error: syntax error, unexpected 'version' (T_STRING 这样的错误,我们则需要 ...
- Java多线程编程——进阶篇二
一.线程的交互 a.线程交互的基础知识 线程交互知识点需要从java.lang.Object的类的三个方法来学习: void notify() 唤醒在此对象监视器上等待的单个 ...
- size()
jQuery 对象中元素的个数. 当前匹配的元素个数.与length将返回相同的值. 示例 描述: 计算文档中所有图片数量 HTML 代码: <img src="test1.jpg&q ...
- master page
<?xml version="1.0"?><configuration> <system.web> <pages clientID ...
- Create Your Tab and LayerTabMenu In Katana
感谢 http://tool.lu/pyc/ 这个牛逼的网站能反编译pyc...他妈的Katana太他妈无耻了,竟然不让自定义加Node Tab Content....只能反编译他的东西了... 研究 ...
- MySQL如何关联查询
总的来说,mysql认为任何一个查询都是一次关联,并不仅仅是一个查询需要用到两个表匹配才叫关联,所以,在mysql中,每一个查询,每一个片段(包括子查询,甚至单表select)都可能是关联.所以,理解 ...