canvas 主要使用2D rendering context  API 实现其功能和特效。

canvas 一般浏览器都支持,但在ie9之前的是不支持的。(解决办法:添加IxplorerCanvas 脚本。)

学习canvas需要用到javscript和jQuery。

首先要引入jQuery库。

定义画布:

  <script type="text/javascript">

    var canvas = $("#mycanvas");

    var context = canvas.get(0).getContext("2d");

  </script>

画正方形:context.fillRect(x,y,width,height);(x,y)是正方形离坐标原点的距离,width,height是正方形的宽,高。

.strokeRect()也可以画正方形。同样是四个参数。

两者的区别是:.fillRect()画的正方形是有填充色的,但没有边框。

       .strokeRect()画的正方没有填充色,但有边框。

画线条:lineTo();但不能直接像fillRect()那样调用。

要先调用一些其他的方法:

  contex.beginPath();//开始路径

  context.moveTo(x,y);//路径的起点坐标;

  context.lineTo(x,y);//路径的终点坐标;

  context.closePath();//结束路径;

  context.stroke();//画出路径;

线和正方形的样式都可以调用相同的方法修改其样式:

.strokeStyle= "rgb()";修改形状和路径的填充颜色;

.lineWidth = 10;//修改形状的和路径的线宽;

4.保存和恢复图片

他们的机制值栈机制(先进后出)

保存:.save(),保存画布状态,通过多次调用save(),能够将绘制状态保存到栈中,最早的在栈的底部。

恢复:restore(),恢复画布状态;通过多次调用restore()能够自动取出最初添加到栈中的绘图状态;

5.变形

  5.1平移

  translate(x,y);平移的是坐标的点,新的坐标点(x,y)=原来(x,y)+translate(x,y);

  会影响执行平移后的所有元素。

  5.2缩放

  scale(2,2),缩放的是倍数,不是像素,是(x,y)分别乘以2;

  

  5.3旋转

  rotate(0.7854)   //Math.PI/4

  旋转是以圆点坐标为中心点的,常常和translate( )一起使用

  注意他们之间的顺序:

  5.4变形矩阵

  transform(2, 0, 2, 0, 150, 150)    //(x轴缩放,y轴倾斜,x轴倾斜,y轴缩放,x轴平移,y轴平移)

  

6.合成

  6.1 全局阿尔法值(透明度) //值会影响到修改之后所绘制的全部对象

  globalAlpha = 0.5  //值在0~1之间

  6.2 合成操作

  globalCompositonOperation = " "; 共有11中方式,详情见《Canvas基础教程》

  

7.效果

  

  7.1阴影

    设置阴影通过4个全局属性控制:

    .shadowBlur = 20 ;  阴影的模糊值

    .shadowOffsetX; x轴上的偏移量;

    .shadowOffsetY ,y轴上的偏移量;

    .shadowColor = "rgba(0, 0, 0, 0.5)"  ,阴影的颜色以及透明度(透明度)可设可不设;

  7.2渐变

  渐变的方式有两种:

  createLinearGradient:线性渐变

                    都返回→→canvasGradient对象;

  createRadiaGradient:放射性渐变  createRadialGradient方法,参数有(Xstart,Ystart,radiusStart,XEnd,YEnd,radiusEnd),也就是说,它在实行渐变时,使用了两个圆,一个是原始的圆,一个是渐变式圆,其实,这种通过坐标与半径控制的方式可以实现很多样式,比如

  var gradient  = context.createLinearGradient(0, 0, 0, canvas.height( )  );//渐变起点的坐标(x, y),渐变终点的坐标(x, y)

  gradient.addColorStop = (0, "rgb(0, 0, 0)" );    //渐变的起点以及颜色值;

  gradient.addColorStop = (1, "rgb(0, 0, 0)");    //渐变的终点以及颜色值;(0表示渐变起点,1表示渐变终点)

  context.fillStyle = gradient ;

  context.fillRect(0, 0, canvas.width(), canvas.height() );

  7.3贝塞尔曲线

   quedraticCurveTo:二次贝塞尔曲线;quedraticCurveTo(cpx, cpy, x, y),四个参数:(cpx, cpy)控制点坐标,(x, y)目标点坐标

   bezierCurveT0:三次贝塞尔曲线;bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y),六个参数。

   

 8画布与图像

  8.1将画布导出为图像

  将作为图像导出用toDataUrl方法:

  context.save();

  context.fillRect(20,20,50,50);

  context.fillStyle = "rgb(255, 255, 0)";

  context.fillRect(100, 100,50,50);

  context.restore();

  context.fillRect(200, 200,50,50);

  var dataURL = canvas.get(0).toDataUrl;

或者

  var dataURL = canvas.get(0).toDataUrl;

  var img = $("<img></img>");

  img.attr("src", dataURL);

  canvas.replacWith(img);

  8.2加载图片

  将图像加载到画布上,调用drawImage方法:

  conttext.drawImage(image, x, y);//(要绘制的图像,绘制图像的x坐标,绘制图像y坐标).

  drawImage 调用的方法有两种,参数也不同:

    var image = new Image( );

    image.src = "aa.jpg";

    $("image").load(function(){

      conttext.drawImage(image, x, y)

})

  8.3调整图像

   context.drawImage(image, x, y, width, height)

  

  8.4剪裁图像

    context.drawImage(image, sx, sy, sw, sh, dx, dy, dw, dh);(源图像,源图像的裁剪区域(x, y)坐标,源图像的裁剪区宽度和高度,目标图像的坐标(x, y),绘制图像的宽度和高度);

  

8.5图像阴影

  context.shadowBluer = 20;

  context.shadowColor = "rgb(255, 0, 0)";

  var image = new Image();

  image.src = "example.jpg";

  $(image).load(function(){

    context.drawImage(image, 100, 100, 200, 200);

});

但是对图片裁剪之后,图片的阴影会消失。

canvas基础之旅结束。2015/11/3

  

  

  

    

  

  

  

canvas基础之旅的更多相关文章

  1. HTML5移动开发学习笔记之Canvas基础

    1.第一个Canvas程序 看的是HTML5移动开发即学即用这本书,首先学习Canvas基础,废话不多说,直接看第一个例子. 效果图为: 代码如下: <!DOCTYPE html> < ...

  2. canvas 基础知识整理(二)

    html部分: <canvas id="myCanvas" width="800" height="800" ></can ...

  3. canvas 基础知识整理(一)

    canvas这个 HTML 元素是为了客户端矢量图形而设计的.它自己没有行为,但却把一个绘图 API 展现给客户端 JavaScript 以使脚本能够把想绘制的东西都绘制到一块画布上. html的基本 ...

  4. 《HTML5 CANVAS基础教程》读书笔记

    一.HTML5简介 1.HTML5新特性 1)结构元素:section,header,hgroup,footer,nav,article,aside, 2)内容元素:figure,figcaption ...

  5. canvas 基础知识

    canvas 基础 低版本的ie不支持html5,需要引入excanvas.js来让ie支持canvas. 检测支持canvas <canvas id="canvas" wi ...

  6. canvas基础语法

    前面的话 canvas顾名思义是定义在浏览器中的画布.它不仅是一个普通的元素,更是一个强大的编程工具.它的出现已然超过了web基于文档的设计初衷,将网页这一形态的应用推向了另一个高度.利用canvas ...

  7. canvas API ,通俗的canvas基础知识(一)

    在没学canvas的时候,觉得canvas是这么的神秘,这么的绚丽,这么的高深,用canvas做出来的效果是如此的炫酷,能做的事情如此的宽广,简直让我心生敬畏之心,时常感叹:我要是得此技能,必定要上天 ...

  8. canvas基础动画示例

    canvas基础动画示例 本文主要用最简单的例子,展示canvas动画效果是如何实现的 动画效果,是一个球绕着一点旋转 const canvas = document.getElementById(' ...

  9. canvas基础学习

    /** * Created by ty on 2016/7/11. * canvas 基础 */ window.onload = function() { var canvas = document. ...

随机推荐

  1. Delphi中的基础数据类型

    参考http://www.cnblogs.com/del/archive/2007/12/04/982167.html 在学习之初,在这么多的数据类型中,最好记住这五种标准数据类型(整型.实型.字符型 ...

  2. SVN的忽略和只读使用方法学习记录

    前言,先扯几句.最近学了GIT,虽然很肤浅,但是也算是用上了分布式版本管理控制系统.Linus很牛,他也很厌烦SVN,而我看这些都是工具,是否拿来使用主要看是否顺手.我赞同分布式版本管理控制,它有诸多 ...

  3. POJ3321 Apple Tree(树状数组)

    先做一次dfs求得每个节点为根的子树在树状数组中编号的起始值和结束值,再树状数组做区间查询 与单点更新. #include<cstdio> #include<iostream> ...

  4. Git学习笔记 git revert

    我们难免会因为种种原因执行一些错误的commit / push,git提供了revert命令帮助程序员修复这样的错误. 举个例子,下图是git commit 的历史记录 git revert 命令会通 ...

  5. 企业QQ 增加在线交谈链接

    企业QQ的在线交流链接跟普通QQ的在线交流不一样,普通QQ的在线交流,可以在http://shang.qq.com/v3/widget.html生成:企业qq的链接可以按以下步骤添加: 第一步:引入企 ...

  6. 7-13IN和NOT IN 子查询

    IN后面的子查询可以返回多条记录. SELECT ...FROM  WHERE 查询表达式 IN(子查询) 常用IN替换等于(=)的比较子查询. 用法: (1)使用 :IN关键字可以使父查询匹配子查询 ...

  7. android 入门-Eclipse 费解的问题

    1.第一次打开eclipse的时候 代码程序出好多红点.等待加载项目,如果加载完项目之后仍然存在,请重启eclipse. 2.如果你在创建页面中的button 的时候,设置了android:gravi ...

  8. apache https配置步骤

    转自:http://www.cnblogs.com/best-jobs/p/3298258.html 1.  确认是否安装ssl模块 是否有mod_ssl.so文件 2.  生成证书和密钥 linux ...

  9. ios本地推送

    #import "AppDelegate.h" @interface AppDelegate () @end @implementation AppDelegate //无论程序在 ...

  10. 分享Kali Linux 2016.2第48周虚拟机

    分享Kali Linux 2016.2第48周虚拟机该虚拟机使用Kali Linux 2016.2第48周的64位镜像安装而成.基本配置如下:(1)该系统默认设置单CPU双核,内存为2GB,硬盘为50 ...