首先引入<canvas></canvas>标签就不必说了。

其次就是得到canvas的2d环境了( var ctx = canvasDom.getContext('2d') )。

现在呢,你可能想画点什么东西。画东西之前你要确定好一些东西,比如:

  ctx.fillStyle  这是一个用来确定填充颜色的属性。(带fill都和填充有关)

  ctx.strokeStyle  这是一个用来确定"笔路径"(就像是线条)的属性。(带stroke都和描线有关)

  ctx.shadow++  这是有4个设置所画图形阴影的属性(shadowColor,shadowBlur,shadowOffsetX,shadowOffsetY),我不常用,略。

  ctx.lineWidth  这是4个设置线条样式的属性(lineCap,lineJoin,lineWidth,miterLimit)中最常用的,设置线宽,值为带px的string。

  ctx.font  这是设置文本()的字体大小和字体样式,值可以是"30px",也可以是"30px  Microsoft yahei"。同时配合ctx.textAlign和ctx.baseline设置对齐位置和基线位置(什么是基线?百度吧)。然后通过ctx.filltext()或者ctx.strokeText()绘制文字,还有ctx.measureText()返回一个对象,里面包含文本的信息,比如width,height。

了解了上面这些基础属性后,你就可以画点什么了:

  想要显示点什么东西,流程大概是先弄路径(路径是看不见的),然后再通过ctx.fill()或ctx.stroke来对路径进行填充或描线。

  你可以用ctx.rect(x,y,width,height)或ctx.arc(x,y,radius,startAngle,endAngle,anticolorwise)先弄一个路径,然后在fill或者stroke。

  当然矩形有ctx.fillRect()和ctx.strokeRect()直接弄一个可见的方形。(圆没有这两个方法)

  最后再介绍一个黑板擦--ctx.clearRect(x,y,weight,height),用来清除该方框内的所有像素。

  还有一个为了防止之前的路径干扰,可以在每次画之前都ctx.beginPath()来清掉之前的路径。

以上就是基本的canvas的使用,下面就来聊点高(yong)级(bu)点(shang)的。

  矩形样式的渐变填充:

    var grd = ctx.createLinearGradient(x0,y0,x1,y1);

    grd.addColorStop(0,"black");

    grd.addColorStop(1,"white");

    ctx.fillstyle = grd;

    ctx.fillRect(x,y,w,h);

    这一趟下来相当于是先预定义了一个渐变样式(可填充或者描线),将样式设置好后进行填充或者描线。

    还有createRadialGradient()配合addColorStop设置放射状的样式。

  媒体(图片、视频、其他canvas)的填充:

    var img = imgDom;

    var pat = ctx.createPattern(img,"repeat");

    然后这个pat就可以给ctx.++Style,从而进行填充或者描线等。

    其中pattern有四种:repeat(默认),repeat-x,repeat-y,no-repeat。

  自定义路径:

    利用ctx.moveTo(x,y);把路径起点移动到(x,y) ,然后配合lineTo(x,y),就可以得到路径,就可以描线显示出来。

    当然如果你想填充,但是可能路径没有闭合,可以利用ctx.closePath()闭合路径,然后进行填充。

  画布切割:

    使用ctx.clip()可以根据当前已闭合的路径来剪切画布,被剪切的画布部分就不能被操作了。

    可以通过ctx.save()对当前区域先进行保存,然后通过ctx.restore()进行恢复。

  画圆弧:

    画圆弧通过ctx.arcTo(x0,y0,x1,y1,radius);通过两点和半径确定弧线,来得到路径,然后根据需要填充或者描线。

  判断点是否在路径内:

    ctx.isPointInPath();返回布尔值,没啥好说的。

  有一种曲线叫 贝塞尔:

    先用ctx.moveTo()移至起始点。

    ctx.quadraticCurveTo(c1x,c1y,edx,edy);利用起点和一个控制点加终点的贝塞尔曲线;

    ctx.beizierCurveTo(c1x,c1y,c2x,c2y,edx,edy);利用两个控制点绘制的贝塞尔曲线。

  图形转换:

    ctx.scale(w,h);放大w>1就是宽度上放大,h就是高度上。

    ctx.rotate(r);r为弧度单位,如20度:20*Math.PI/180。顺时针。

    ctx.translate(x,y)设置画布上(0,0)的位置,(x,y)就是当前(0,0)的位置。

    ctx.transform(a,b,c,d,e,f);分别是水平缩放、水平倾斜、垂直倾斜、垂直缩放、水平位移、垂直位移。该属性会叠加,对下一个图形有效。

    ctx.setTransform(a,b,c,d,e,f);同上,该属性会重新定义一个transform,对下一个图形有效。

  drawImage():

    ctx.drawImage(dom,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8);除了dom外最多还可以传8个参数,传2个是定位图像(原尺寸),传4个是按大小定位图像,传8个是剪切后定位图像(分别是:剪切开始x,y,剪切大小w,h,定位位置x,y,大小w,h)。

  globalAipha属性:设置全局透明度。(已经画好的不受影响)。

  globalCompositeOperation 属性 设置上一个和下一个重叠区的层叠顺序,有"source-over","destination-over",哪个over,哪个在下面。

更多详情,可以参考W3C

canvas常用属性方法由浅下沉的更多相关文章

  1. Delphi中TStringList类常用属性方法详解

    TStrings是一个抽象类,在实际开发中,是除了基本类型外,应用得最多的. 常规的用法大家都知道,现在来讨论它的一些高级的用法. 先把要讨论的几个属性列出来: 1.CommaText 2.Delim ...

  2. WebBrowser常用属性方法介绍

    WebBrowser 常用属性方法 ■■方法 ==============================  ▲GoBack    相当于IE的"后退"按钮,使你在当前历史列表中后 ...

  3. js如何操作表格(常用属性方法汇总)

    js如何操作表格(常用属性方法汇总) 一.总结 一句话总结: 二.表格相关的属性和方法 1.1 Table 对象集合 cells[] 返回包含表格中所有单元格的一个数组. 语法:tableObject ...

  4. express模块中的req,res参数的常用属性方法

    express模块中的req,res参数的常用属性方法 const express = require('express'); const router = express.Router() rout ...

  5. javascript中array常用属性方法

    属性: length 表示一个无符号 32-bit 整数,返回一个数组中的元素个数. 截短数组..截短至长度2  则:   .length = 2 方法: Array.from() 方法可以将一个类数 ...

  6. jQuery常用属性方法大全 attr(),val()

    @@@@属性篇: 写作本篇文章的意义:jQuery的教程千千万,却没有英文版的API讲的系统.到位,一些话用中文翻译过来味道就变了,所以我将英文版的API的一些常用的方法单独提出来放在这里,并用自己的 ...

  7. delphi 常用属性+方法+事件+代码+函数

    内容居中(属性) alignment->tacenter mome控件 禁用最大化(属性) 窗体-> BorderIcons属性-> biMaximize-> False 让鼠 ...

  8. DOM中document对象的常用属性方法

    每个载入浏览器的 HTML 文档都会成为 Document 对象. Document 对象使我们可以从脚本中对 HTML 页面中的所有元素进行访问. 属性 1  document.anchors  返 ...

  9. vue(5)—— vue的路由插件—vue-router 常用属性方法

    前端路由 看到这里可能有朋友有疑惑了,前端也有路由吗?这些难道不应该是在后端部分操作的吗?确实是这样,但是现在前后端分离后,加上现在的前端框架的实用性,为的就是均衡前后端的工作量,所以在前端也有了路由 ...

随机推荐

  1. 【Udacity笔记】What is Machine Learning?

    Teaching computers to learn to perform tasks from past experiences(recorded data) 一.Decision Tree(决策 ...

  2. 【JAVA语法】04Java-多态性

    多态性 instanceof 关键字 接口的应用 一.多态性 1.多态性的体现: 方法的重载和重写 对象的多态性 2.对象的多态性: 向上转型: 程序会自动完成 父类 父类对象 = 子类实例 向下转型 ...

  3. css层叠性和继承性

    1.了解css层叠性 层叠性是什么?就是解决处理css选择器和属性冲突的能力.css的选择器权重是分大小,就是当多个选择器都选中了同一个标签时,听谁的??? 标签选择器 < 类选择器 < ...

  4. web images

    ps切图时,我们保存时会要求选择文件格式. 一般来说,如果图像的色彩丰富,没有透明度的要求,则选择为jpeg格式: 如果图像色彩不丰富,我们就选择为png-8的格式,注意:ps中要选择无杂边,无仿色 ...

  5. Topshelf Configuration z

    Topshelf Configuration While the Quickstart gives you enough to get going, there are many more featu ...

  6. FZEasyFile的使用

    FZEasyFile的使用 https://github.com/jiecao-fm/FZEasyFile 操作沙盒文件很恶心,但用上FZEasyFile就变得简单了. 以前你需要这么做才行: NSF ...

  7. MyEcplise使用---使用 MyEclipse 反转引擎生成数据库

    使用 MyEclipse 反转引擎,生成数据库 步骤: 1. 新建 Database 连接 2. 新建web项目 temp 添加myeclipse hibernate 能力 3. Hibernate ...

  8. SAP CRM One Order跟踪和日志工具CRMD_TRACE_SET

    事务码CRMD_TRACE_SET激活跟踪模式: 在跟踪模式下运行One Order场景.运行完毕后,使用事务码CRMD_TRACE_EVAL: 双击参数,就能看到参数明细: 点Callstack也能 ...

  9. 2017U-Mail邮件营销平台新邮件模板功能

    据U-Mail调查表明,企业用户中普遍最关心群发邮件会不会被列入垃圾箱?的确,哪怕你最用功,一旦邮件进了垃圾箱,意味着全盘尽废.业界知名服务商U-Mail一直想用户之所想,急用户之所急,十几年如一日, ...

  10. WAS缓存问题

    在项目中经常遇见这样的问题:修改应用的配置文件web.xml后,无论重启应用还是重启WebSphere服务器,都不能重新加载web.xml,导致修改的内容无效. 这个问题困扰了我好久,即使删除了${w ...