canvas画布

1.不要再style中给canvas设置宽高,会有位移差

<canvas width="300" height="500" id="c"></canvas>

但可以设置画布的背景色

2.

var c=document.getElementById("c")//给c设置子一个绘图环境   得到一个对象
var can=c.getContext("2d")

canvas本身只是一个H5新标签,他的本质和div差不多

但当给了他   getContext("2d")    后  就成为了一个画图对象

然后就可以通过他内置的属性方法进行作画

绘制方块:

fillRect()  绘制一个填充的方块  默认颜色是黑色 但是可以通过  fillStyle(填充颜色)  改变

注意:一切样式的改变都要在写在绘制之前    遵循js从上往下执行的规则

can.fillStyle="red"
can.fillRect(20,30,100,100)

我这一个方块就是先将其颜色变为红色,然后再绘制出来

fillRect()中有4个参数  分别代表着 方块的  x轴位置 y轴位置  宽  以及  高

位置都想相对于画布的左上角为(0,0) 进行移动的

(我的画布部分为白色,非画布部分是黑色)

strokeRect()  绘制带边框的方块  默认边框颜色是黑色 但是可以通过  strokeStyle(填充颜色)  改变

strokeRect()中有4个参数  分别代表着 方块的  x轴位置 y轴位置  宽  以及  高    (跟填充差不多)

can.fillStyle="red"
can.strokeRect(20,30,100,100)

绘制线条:

  moveTo() 绘制线段的起点

  lineTo()  绘制线段的领点

  每个线段只能有一个moveTo 可以有多个lineTo

  stroke() 绘制线段

  

  beginPath()  开始绘制路径

  closePath()  结束绘制路径   二者同时出现  将绘制路径闭合

  (起始点  结尾点首尾相连)

  Rect()  绘制方块

  clearRect(0,0,width,height)   清除画布(画布中图样的不断变化,是通过不断清除画图,不断重复作画得出的)

  save()  保存路径

  restore()    回复路径

  二者成对出现,中间的属性样式只影响内部  不影响外面

画圆:

  arc()

can.arc(150,150,95,0,2*Math.PI,false)

  参数作用分别为  x  , y圆心位置(都是以canvas画布的左上角为起点)   半径    弧度起点   弧度终点    false(顺时针)/true(逆时针)

  注意  :角度有正负之分  顺时针转的角度是正的, 逆时针转的角度是负的

画布的平移和旋转

平移translate画布大小位置不变  起始坐标  变了

can.translate(100,100)

相当于坐标平移

rotate()

画布的旋转都是以(0,0)起始点为中心点旋转

scale(0.5,0.5)

画布的缩放   就是将画布向后移动  跟人的视距就变远了  近大远小

画布中插入图片

var img=new Image;img.src="bg.jpg"img.οnlοad=function(){can.drawImage(img,10,20,160,200)}

需要创建一个图片对象,让图片被加载完成后执行

插入字体:

200,200字体的起始点  默认起始点在文字的左下角

svg 矢量图

  svg绘制矢量图  canvas用于绘制位图

  svg使用xml格式绘制图形

svg要有一个根节点  叫svg标签  就相当于 html

svg如果不设置大小  默认占用面积  300*150

定义矩形

  <rect></rect>  属性: width(宽) height(高)  x  y(位置)   rx ry(圆角)  fill(填充颜色)  stroke-width(边框宽度)   stroke(边框颜色)

  opacity透明度(填充和边框都改变)   fill-opacity填充透明度   stroke-opacity边框透明度

定义圆

  <circle></circle>   属性: cx  cy(圆心坐标)   r(半径)

定义椭圆

  <ellipse></ellipse>   cx cy(圆心坐标)   rx(定义x轴半径)   ry(定义y轴半径)

定义直线

  <line></line>   x1 y1(起始坐标)    x2 y2(定义结束坐标)   stroke(线段颜色)

定义路径

  <path></path>

M是起点坐标

L是相邻点坐标

Z让路径构成闭合回路

H代表水平的线条 默认y轴上的值一样

V 代表垂直的线条 默认x轴上的值一样

A 后面跟七个值

Transfrom 转换 svg中的一个属性 translate  rotate scale

平移 旋转 都是以起点0 0(svg的左上角)点为参考点 而css3中以元素的中心点为参考点

g  用于将相关元素进行组合

g身上的属性 子元素都会继承 但是g上的属性都必须是显现属性 不是svg元素私有的 比如 g 上的圆心坐标不行

Text 用于定义文本 x y xy的值在字体的左下角

Text-anchor=”middle” 让字体居中

Image 绘制图片

<use>用于复制元素 x y

xy 是相对于原始的元素的坐标位置 不是相对svg的00点坐标

animate

写在需要动画元素的中间

attributeName  form to dur repeatCount=”indefinite”(无限次)

转载于:https://www.cnblogs.com/Shinigami/p/10902327.html

canvas和svg相关推荐

  1. Canvas VS . SVG

    SVG SVG 是一种使用 XML 描述 2D 图形的语言. SVG 基于 XML,这意味着 SVG DOM 中的每个元素都是可用的.您可以为某个元素附加 JavaScript 事件处理器. 在 SV ...

  2. HTML5 Canvas、内联 SVG、Canvas vs. SVG

    canvas 元素用于在网页上绘制图形. 什么是 Canvas? HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像. 画布是一个矩形区域,您可以控制其每一像素. canv ...

  3. 080_html5 Canvas和SVG

    1. Canvas和SVG都允许您在浏览器中创建图形, 但是它们在根本上是不同的. 2. SVG 2.1. SVG是一种使用XML描述2D图形的语言. 2.2. SVG基于XML, 这意味着SVG D ...

  4. H5中canvas和svg绘图方式介绍

    在HTML5中包括了两种绘图方式,canvas和svg(矢量呈现),而与canvas不同的是,svg是一种XML标记语言,它既可以单独保存以".svg"为后缀的文件在浏览器中打开显 ...

  5. Canvas or SVG?一张好图,两手准备,就在 ECharts 4.0

    Canvas 和 SVG 是两大基于浏览器的渲染方案,在选择图表库的时候,用户有时也会在这两者之间纠结.但是纠结的时候,你是否真的明白这两者在哪些方面有优劣? ECharts 4.0 推出 Canva ...

  6. HTML5 Canvas vs. SVG vs. div

    本文翻译自:HTML5 Canvas vs. SVG vs. div What is the best approach for creating elements on the fly and be ...

  7. canvas webGL SVG 比较

    https://blog.csdn.net/Thea12138/article/details/79723380 对每个类型的封装库:https://blog.csdn.net/u010513603/ ...

  8. html5 svg特性,HTML5新特性——HTML 5 Canvas vs. SVG

    Canvas 和 SVG 都允许您在浏览器中创建图形,但是它们在根本上是不同的. SVG SVG 是一种使用 XML 描述 2D 图形的语言. SVG 基于 XML,这意味着 SVG DOM 中的每个 ...

  9. HTML画布与SVG(Canvas vs. SVG)

    目录 画布(Canvas) 什么是 Canvas? 创建 Canvas 元素 通过 JavaScript 来绘制 理解坐标 更多 Canvas 实例 实例 - 线条 实例 - 圆形 实例 - 渐变 实 ...

  10. HTML5的图像系统Canvas与SVG

    在HTML5之前,没有标准的提供可供Javascript脚本调用的图像系统,以前的做法通常是通过Div来画点.线.矩形这种非常"笨"的办法来变相的绘图,虽然很"笨&quo ...

最新文章

  1. mysql主从同步默认延迟_减少mysql主从数据同步延迟问题的详解
  2. linux与windows互传文件、用户与用户组管理、密码配置文件
  3. 编写一个函数itob(int n,char s[], int b),将整数n转换为以b进制的数。保存到s中。...
  4. bind merge r 和join_[R] 制作梅西和C罗进球数的quot;追赶动画quot; - ggplot2 + gifski
  5. OpenGL ARB 看来终于想通了,OpenGL SDK终于要出来了。
  6. 请各位程序员 正在创业的 正在努力赚钱的 好好看看下面的话
  7. 计算机网络原理201810自考,2018年10月自考04741计算机网络原理试卷及答案
  8. HTML5新增的客户端校验
  9. 练习1.account表 添加一条记录
  10. Java虚拟机类加载器--双亲委派模型
  11. 《欲罢不能:刷屏时代如何摆脱行为上瘾》书摘
  12. 【裴礼文数学分析】例1.2.1
  13. Hbase的table存储详解
  14. 沪深股票的复权计算(复权因子的应用)
  15. iptables中DNAT、SNAT和MASQUERADE
  16. 【彩虹 钢琴伴奏】笔记
  17. Androd 基本布局(其一)
  18. VC 常见的108个问题[转]
  19. java excel 批注_Java 添加、读取和删除 Excel 批注的操作代码
  20. 关于C语言的独立(freestanding)和托管(hosted)环境

热门文章

  1. 卧槽!新来的妹纸rm -rf把公司整个数据库删没了,整个项目组慌了~
  2. 为什么 String hashCode 方法选择数字31作为乘子?
  3. Linux 下 4 种实时监控日志文件的方法,你都会用吗?
  4. 华为将在数据库市场挑战Oracle:5月15日发布云数据库产品
  5. 重磅消息:F5收购Nginx!
  6. 《Android 面试指南》来自腾讯、阿里巴巴、欢聚时代、美团、聚美优品、悦跑圈等大佬分享的面经...
  7. mysql基础之mariadb集群主从架构
  8. CTF-Mayday
  9. Python3 从零单排17_类的继承
  10. 人工智能面试题86问,新手找工作必备!