首页 > 代码库 > 代码开发角度分析 svg canvas的不同
代码开发角度分析 svg canvas的不同
Canvas
- 依赖分辨率
- 不支持事件处理器
- 弱的文本渲染能力
- 能够以 .png 或 .jpg 格式保存结果图像
- 最适合图像密集型的游戏,其中的许多对象会被频繁重绘
SVG
- 不依赖分辨率
- 支持事件处理器
- 最适合带有大型渲染区域的应用程序(比如谷歌地图)
- 复杂度高会减慢渲染速度(任何过度使用 DOM 的应用都不快)
- 不适合游戏应用
1 canvas:不支持事件处理,所以必须有一部分逻辑来做 来做模拟事件 和dom对象的作用。一般会使用一个基本的canvas库
2 canvas: 弱的文本渲染能力
3 相较于svg 对于浏览器来说 dom的复杂度会直接影响浏览器的效率。(崩溃 白屏 死机 )
写个canvas 拖拽的demo
var Draw={ init:function(){ this.cObj=document.getElementById("myCanvas").getContext("2d"); this.event() this.draw.prototype=this this.p=new this.draw(45,45,70,70,"red") /* window.setTimeout(function(){ this.p.draw(45,145,70,70,"red") }.bind(this),2000)*/ }, draw:function(x,y,w,h,color){ this.cObj.clearRect(this.x-1,this.y-1,this.w+2,this.h+2); this.x=x this.y=y this.w=w this.h=h this.color=color this.cObj.strokeStyle=this.color this.cObj.strokeRect(this.x,this.y,this.w,this.h); }, onm ouseMove:function(evt){ if(this.p.isDown){ var X=evt.layerX-this.p.w/2; var Y=evt.layerY-this.p.h/2; this.p.draw(X,Y,70,70,"red"); } }, onm ouseDown:function(evt){ var X=evt.layerX; var Y=evt.layerY; if(X<this.p.x+this.p.w&&X>this.p.x) { if(Y<this.p.y+this.p.h&&Y>this.p.y){ this.p.isDown=true; } } else { this.p.isDown=false; } }, onm ouseUp:function(){ this.p.isDown=false }, event:function(){ var canvas=document.getElementById("myCanvas") canvas.addEventListener("mousedown",this.OnMouseDown.bind(this),false); canvas.addEventListener("mousemove",this.OnMouseMove.bind(this),false); canvas.addEventListener("mouseup",this.OnMouseUp.bind(this),false); } } Draw.init()
代码开发角度分析 svg canvas的不同
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。