代码开发角度分析 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);
           },
           OnMouseMove: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");
               }

           },
           OnMouseDown: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;
               }
           },
           OnMouseUp: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()

  

  

时间: 2024-10-11 21:05:16

代码开发角度分析 svg canvas的不同的相关文章

从源码角度分析Android View的绘制机制(一)

在Android的学习道路上,每一个人员都免不了去翻阅Android的源码,因为只有从源码的角度分析问题,我们才能真正的玩转Android开发.最近由于工作比较闲,总想着想写点什么东西,正好自己也可以整理一下.考虑到view的显示机制是自定义view的基础,也是面试中经常被问到的问题,所以记录此文,和大家共享,因水平有限,望大家踊跃拍砖,不胜感激. 有过自定义view的同行们都应该知道,view的显示依托于activity的setContentView方法依附到PhoneWindow窗体上的,在

从程序员的角度分析微信小程序

昨天朋友圈被微信小程序刷爆了. 我赶快在书架上拿出三年前买的书,把上面的土擦干净,压压惊. 作为一个并不是资深的程序员. 从程序员的角度分析一下微信小程序,欢迎指点. 首先吐槽 微信小程序只发了200个邀请号,和我预想的一样,张小龙并没有翻我牌,难道就不能雨露均沾吗? 先来了解下什么是微信小程序. 转自知乎 微信也许重申了"我们是一款约炮软件" 微信还提供了一大堆接口和组件(不好意思,说了句废话). 下面是禅叔的观点: 小程序原理就是用JS调用底层native组件,和React Nat

从开发者的角度分析iOS应如何省电

从开发者的角度分析iOS应如何省电 说明 网上关于iPhone如何省电的文章很多.但是基本没有讲原理.而在生活中,很多人在使用iPhone中有着明显的错误的省电习惯. 本文从iOS开发者的角度,对iOS的各项功能和技术进行说明,得出合理的省电技巧,以供大家参考. 如果你对省电原理没有兴趣,请直接到文章最后,查看如何省电的方法. 哪些功能(硬件)是耗电大户 网络下载 wifi和4G都是耗电大户,但是要知道手机上的网络模块并不是一直在高速工作状态.一般认为下载时耗电多,如果不是处于下载状态,耗电较少

从虚拟机指令执行的角度分析JAVA中多态的实现原理

从虚拟机指令执行的角度分析JAVA中多态的实现原理 前几天突然被一个"家伙"问了几个问题,其中一个是:JAVA中的多态的实现原理是什么? 我一想,这肯定不是从语法的角度来阐释多态吧,隐隐约约地记得是与Class文件格式中的方法表有关,但是不知道虚拟机在执行的时候,是如何选择正确的方法来执行的了.so,趁着周末,把压箱底的<深入理解Java虚拟机>拿出来,重新看了下第6.7.8章中的内容,梳理一下:从我们用开发工具(Intellij 或者Eclipse)写的 .java 源程

CVE-2017-7269—IIS 6.0 WebDAV远程代码执行漏洞分析

漏洞描述: 3月27日,在Windows 2003 R2上使用IIS 6.0 爆出了0Day漏洞(CVE-2017-7269),漏洞利用PoC开始流传,但糟糕的是这产品已经停止更新了.网上流传的poc下载链接如下. github地址:https://github.com/edwardz246003/IIS_exploit 结合上面的POC,我们对漏洞的成因及利用过程进行了详细的分析.在分析过程中,对poc的exploit利用技巧感到惊叹,多次使用同一个漏洞函数触发,而同一个漏洞同一段漏洞利用代码

混合开发模式下主流移动开发平台分析

关键字:AppCan 移动开发平台 移动应用 Hybrid App在过去的两年中已经成为移动界的核心话题,但是作为一名Web开发者来说要如何站在移动互联网的浪潮之巅呢?是选择学习原生开发,研究Java.Object-C.C#等语言,还是选择继续使用网页开发,容忍HTML5功能的局限性?就在开发者左右为难的情况下Hybrid App作为一个折中的解决方案诞生了.那么究竟什么才是Hybrid App呢?HybridApp概念Hybrid App:Hybrid App is a mobile appl

从技术的角度分析我们到底需要什么样的CRM

尽管我们仍然对大数据以及所谓的"数字化决策"怀有戒心,但是我们对CRM的热情依然不减.在"营销即价值交换"的共识下,客户关系管理是数字营销的起点和终点,也是粉丝经济.体验经济等"新经济"的战略支点和实现平台.    上世纪80年代初,由Oracle.Siebel 带领的软件公司开创了CRM行业,把电讯科技带入了传统销售.90年代末,Salesforce.com在1999年第一次将CRM带入了云,用户通过浏览器即可使用.当年贝恩咨询的三位大牛 Da

从源码的角度分析ViewGruop的事件分发

从源码的角度分析ViewGruop的事件分发. 首先我们来探讨一下,什么是ViewGroup?它和普通的View有什么区别? 顾名思义,ViewGroup就是一组View的集合,它包含很多的子View和子VewGroup,是Android中所有布局的父类或间接父类,像LinearLayout.RelativeLayout等都是继承自ViewGroup的.但ViewGroup实际上也是一个View,只不过比起View,它多了可以包含子View和定义布局参数的功能.ViewGroup继承结构示意图如

从源码角度分析linearLayout测量过程以及weight机制

???上文从源码角度分析了view和viewGroup的measure机制,如果还没有阅读的同志们,可以前往从源码角度分析Android View的绘制机制(一)阅读.下面我再结合linearLayout的measure过程解释以下两个问题的缘由. 问题一: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent