html之SVG和canvas的区别

canvas和svg都允许在浏览器上创建图形,但是根本上是不同的。

SVG

  • SVG是一种使用XML描述的2D图形
  • SVG基于XML,这意味着SVG Dom的每个元素都是可用的,可以为某个元素附加js事件处理器
  • SVG中,每个被绘制过的图形均视为对象,如果SVG对象的属性发生变化,那么浏览器可以自行重现图形
  • 画出的图形是矢量图,所以不能引入普通的图形,但是矢量图放大不会失真,所以适合做地图
  • 绘制图形一般使用标签来实现

Canvas

canvas是html5提供的新元素,而svg存在的时间长。

  • canvas通过js绘制2d图形
  • canvas是逐像素进行渲染的
  • 在Canvas中,一旦图形被绘制完成,他就不会继续得到浏览器的关注,如果他的位置发生变化,那么就需要重新来绘制图形,其中包括任何或已经被图形覆盖的对象。
  • 画出的是标量图,引入的是jpg,png
  • 绘制图形一般通过js实现
  • canvas绘制的图形不能被搜索引擎抓取

比较

Canvas

  • 依赖分辨率
  • 不支持事件处理器
  • 文本渲染力弱
  • 能够以 .png 或 .jpg 的格式保存结果图形
  • 最合适图像密集型的游戏,其中许多的对象会被频繁的重绘

SVG

  • 不依赖分辨率
  • 支持事件处理器
  • 最合适带有大型渲染区域的应用程序(如,百度地图、谷歌地图等等)
  • 不适合游戏的应用
  • 复杂度高会减慢渲染的速度
  • 以单个文件的形式独立存在,后缀名为.svg,可以在html文件中以img标签的src,元素背景,框架等引入 或者 直接在html文件中引入SVG标签

使用

<body>
    <!-- 创建canvas元素 -->
    <canvas id="myCanvas" onmousemove="getC(event)" onmouseout="clearC()"></canvas>

</body>
<script>
// 绘图要通过js
var c=document.getElementById("myCanvas");
// getContext("2d") 对象是内建的 HTML5 对象,拥有多种绘制路径、矩形、圆形、字符
var cxt=c.getContext("2d");
// 红色矩形
cxt.fillStyle="#FF0000"
// 在画布上绘制 150x75 的矩形,从左上角开始 (0,0)。
cxt.fillRect(0,0,150,75);
// moveto为起点,lintto为终点,第二个lineto为第二条线的终点
cxt.moveTo(10,10);
cxt.lineTo(150,50);
cxt.lineTo(10,50);
cxt.stroke();

// 圆
cxt.fillStyle="yellow"
cxt.beginPath();
cxt.arc(70,18,15,0,Math.PI*2,true);
cxt.closePath();
cxt.fill();

// 线性渐变
cxt.beginPath();
var grd=cxt.createLinearGradient(100,70,175,50);
grd.addColorStop(0,"yellow");
grd.addColorStop(1,"blue");
cxt.fillStyle=grd;
cxt.arc(100,70,15,0,Math.PI*2,true);
cxt.closePath();
cxt.fill();

// 插入图片,我也不知道为啥这不灵
var img=new Image();
img.src='02.jpg';
cxt.drawImage(img,0,0);

// 得到坐标
function getC(event){
    x=event.clientX;
    y=event.clientY;
    console.log("x= "+x+" y= "+y);
}
function clearC(){
    //空
}
</script>
<style>
#myCanvas{
    width: 200px;
    height: 100px;
}
</style>
</html>

图片说明

全部评论

相关推荐

点赞 评论 收藏
分享
每晚夜里独自颤抖:你cet6就cet6,cet4就cet4,你写个cet证书等是什么意思。专业技能快赶上项目行数,你做的这2个项目哪里能提现你有这么多技能呢
点赞 评论 收藏
分享
大方的大熊猫准备进厂:1.教育背景:你希望从事什么专业的工作你的主修课就是什么;成绩优秀是你应该做的,没什么可描述的,成绩不优秀也许人家在大学忙着创业呢?(成绩优秀不一定是好事,只能说明多元化的大学你上成了高中,没有真正上明白大学,反而体现了你死板,不爱社交,没有别的突出能力) 2.实践经历:你想表达的意思没有说清楚。你是说你会个性化服务,还是你有实习经历。如果没有带来,经济收益,表彰,更好的发展前景,那你还不如说说提升了自己哪些技能。你说有人给你送锦旗我都能明白你优秀,但是你说你会xxxx,你说这话谁信,证据呢。 3.入伍经历:你描述的就是你的工作职责或者你应该做的,并没有体现出来你把这个事情做好了,而且入伍经历并不能证明你能干好你要应聘的工作,不如只写经历其余所有内容都不写。 4.荣誉技能:重点突出一下,但不要过多描述,这些荣誉的含金量懂得都懂。 重点:你要应聘什么工作(具体岗位,实习生不具体),你的期望薪资
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务