`
IvanLi
  • 浏览: 604479 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SVG 编程第一步

阅读更多
Supported Browser

  • Firefox 2+
  • Opera 9.0+
  • Safari 3.0+
  • SeaMonkey 1.1+


SVG Resource


把SVG嵌入到网页中的3种方式
  • Use <object> Tag
  • Use <embed> Tag (Best Practice)
  • As embeded namespace


<?xml version="1.0" standalone="no"?>
<!DOCTYPE html PUBLIC
    "-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN"
"http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
  <title>SVG as embedded object and nested namespace</title>
</head>
<body>
<h2>Object tag</h2>
<object type="image/svg+xml" data="standalone.svg">
Your browser is currently unable to display SVG images.
</object>
<h2>Nested namespace</h2>
<svg:svg version="1.1" width="5cm" height="4cm"
      xmlns:svg="http://www.w3.org/2000/svg">
  <svg:title>Four rectangles</svg:title>
  <svg:rect x="0.5cm" y="0.5cm" width="2cm" height="1cm"/>
  <svg:rect x="0.5cm" y="2cm" width="1cm" height="1.5cm"/>
  <svg:rect x="3cm" y="0.5cm" width="1.5cm" height="2cm"/>
  <svg:rect x="3.5cm" y="3cm" width="1cm" height="0.5cm"/>
  <!-- Show outline of canvas using 'rect' element -->
  <svg:rect x=".01cm" y=".01cm" width="4.98cm" height="3.98cm"
       fill="none" stroke="blue" stroke-width=".02cm" />
</svg:svg>
<h2>Embed tag</h2>
<embed id="svg3" src="standalone.svg" />
</body>
</html>


SVG 中画箭头例子

<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" 
  "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg width="4cm" height="4cm" viewBox="0 0 400 400"
     xmlns="http://www.w3.org/2000/svg">
  <desc>Markers</desc>
  <defs>
    <marker id="arrow"
      viewBox="0 0 10 10" refX="0" refY="5" 
      markerUnits="strokeWidth" markerWidth="3" markerHeight="10"
      orient="auto">

      <path d="M 0 0 L 10 5 L 0 10 z" fill="yellow" stroke="black"/>

    </marker>
  </defs>
  <rect x="1" y="1" width="398" height="300"
        fill="none" stroke="blue" />

  <!-- First row -->
  <path d="M75,100 c25,-75 50,50 100,0 s50,-50 150,50"
        stroke="purple" stroke-width="5" fill="none"
        marker-start="url(#arrow)"
        marker-mid="url(#arrow)"
        marker-end="url(#arrow)" />

  <!-- Second row -->
  <path d="M75,200 c25,-75 50,50 100,0 s50,-50 150,50"
        stroke="purple" stroke-width="3" fill="none"
        marker-start="url(#arrow)"
        marker-mid="url(#arrow)"
        marker-end="url(#arrow)" />
</svg>


SVG 中用鼠标划线 例子

<svg version="1.1" baseProfile="full"
     xmlns="http://www.w3.org/2000/svg"
     xmlns:xlink="http://www.w3.org/1999/xlink"
     xmlns:ev="http://www.w3.org/2001/xml-events" 
     width='100%' height='100%'
    onload='Init(evt)'   onmousedown='Grab(evt)'    onmousemove='Drag(evt)' onmouseup='Drop(evt)'>
   <title>Drag And Drop</title>
   <desc>
      A Demo to Draw line in SVG Canvas
   </desc>
   <defs>
    <marker id="arrow"
      viewBox="0 0 10 10" refX="0" refY="5" 
      markerUnits="strokeWidth" markerWidth="3" markerHeight="10"
      orient="auto">
      <path d="M 0 0 L 10 5 L 0 10 z" fill="yellow" stroke="black"/>
    </marker>
   </defs>
   <script type="text/ecmascript"><![CDATA[
      var SVGDocument = null;
      var SVGRoot = null;
      var BackDrop = null;
      var isDrawLine = null;
      var gCanvas = null;
      var lineNode = null;

      function Init(evt)
      {
         SVGDocument = evt.target.ownerDocument;
         SVGRoot = SVGDocument.documentElement;

         // this will serve as the canvas over which items are dragged.
         //    having the drag events occur on the mousemove over a backdrop
         //    (instead of the dragged element) prevents the dragged element
         //    from being inadvertantly dropped when the mouse is moved rapidly
         BackDrop = SVGDocument.getElementById('BackDrop');
         gCanvas = SVGDocument.getElementById('gid');
      }

      function Grab(evt)
      {   
          lineNode=SVGDocument.createElementNS('http://www.w3.org/2000/svg','line');
          lineNode.setAttributeNS(null,'x1',evt.clientX);
          lineNode.setAttributeNS(null,'y1',evt.clientY);
          lineNode.setAttributeNS(null,'x2',evt.clientX);
          lineNode.setAttributeNS(null,'y2',evt.clientY);
          lineNode.setAttributeNS(null,'stroke','blue');
          lineNode.setAttributeNS(null,'stroke-width','2');
          BackDrop.parentNode.appendChild(lineNode);
          isDrawLine = true;
      };
      function Drag(evt)
      {
         // if we don't currently have an element in tow, don't do anything
         if (isDrawLine)
         {
            lineNode.setAttributeNS(null,'x2',evt.clientX);
            lineNode.setAttributeNS(null,'y2',evt.clientY);
            lineNode.setAttributeNS(null,'marker-end','url(#arrow)');
         }
      };
      function Drop(evt)
      {
         // if we aren't currently dragging an element, don't do anything
         if ( isDrawLine )
         {
            lineNode.setAttributeNS(null,'x2',evt.clientX);
            lineNode.setAttributeNS(null,'y2',evt.clientY);
            isDrawLine = false;
         }
      };
   ]]></script>
  <g id="gid">
   <rect id='BackDrop' x='-10%' y='-10%' width='110%' height='110%' fill='none' pointer-events='all' />
  </g>
</svg>
2
0
分享到:
评论
1 楼 highjade 2008-08-25  
不错,继续啊

相关推荐

    Python库 | eagle2svg-0.1.4.tar.gz

    Python是一种高级编程语言,以其易读性和简洁的语法而闻名,适合快速开发和原型设计。它拥有丰富的标准库和第三方库,使得开发者能够高效地完成各种任务。在后端开发中,Python库如Flask、Django等被用来构建服务器...

    svg_jars.7z

    10. **batik-parser-1.7.jar**:SVG解析器,用于读取SVG文件并将其转换为Java对象,是处理SVG文件的第一步。 这些jar文件组合在一起,可以让你在Java应用程序中轻松地实现SVG的读取、解析、绘制、编辑和动画等操作...

    SVG Charter-开源

    它是了解项目的第一步,对于新用户和潜在贡献者非常有用。 总的来说,"SVG Charter"是一个利用Perl和SVG技术进行数据可视化的开源工具。通过其提供的功能,开发者和设计师可以创建高质量、可扩展的图表,适用于网页...

    react-icons:用React构建SVG图标

    使用React Icons的第一步是安装库。你可以通过npm或yarn来完成这个操作: ```bash npm install react-icons # 或者 yarn add react-icons ``` 一旦安装完成,你可以从库中导入所需的图标。例如,如果你需要一个...

    设置打印表头颜色选择表格属性

    首先,"写表头"是创建报告或表格的第一步,它通常包含列名或字段名,帮助用户理解数据的意义。在编程中,这可能通过循环语句和字符串拼接实现,例如在Python中使用`for`循环和`print`函数,或者在JavaScript中使用...

    计算机图形学基础教程源码

    1. **基本图形绘制**:在计算机图形学中,绘制简单形状如圆和线条是入门的第一步。圆形的绘制通常基于极坐标系统,通过指定半径和中心点,利用数学公式如欧几里得几何来实现。线条曲线的绘制则可能涉及Bresenham算法...

    编译原理大作业-图形绘图语言

    1. **词法分析**:这是编译器的第一步,它将源代码中的字符流转换为有意义的词法单元(token)。对于图形绘图语言,词法单元可能包括颜色名、坐标值、绘图命令(如`line`、`circle`)等。词法分析器通常使用正则...

    学习:Aprendiendo是一名编程人员

    Aprendiendo作为一名编程人员,理解...总之,HTML是编程人员的基础技能之一,理解和掌握其核心概念是构建网页和进行Web开发的第一步。持续学习和实践,Aprendiendo将能够熟练运用HTML创建出富有吸引力和功能性的网页。

    各类帮助文档

    对于Java开发者来说,安装JDK是开始工作的第一步。 3. J2EE (Java 2 Enterprise Edition): 是一个开放源代码的企业级应用开发平台,它由Java Servlet、JavaServer Pages (JSP)、JavaBeans、EJB (Enterprise ...

    ST340-数据科学编程

    了解这些基础元素是制作网页的第一步。 2. **数据可视化**:HTML可以与SVG(Scalable Vector Graphics)或Canvas结合,直接在网页上绘制图形。这对于呈现数据分布、趋势线等图表非常有用。例如,可以使用D3.js库,...

    数据爬取+数据分析实例对应资源

    首先,数据爬取是获取网络数据的第一步。Python提供了多个强大的库来实现这一目标,如BeautifulSoup、Scrapy和Requests。这些库可以帮助我们解析HTML和XML文档,抓取网页上的结构化和非结构化信息。在实际操作中,...

    HTML、CSS、JavaScript合集

    了解HTML的基本语法和元素是成为一名合格的网页开发者的第一步。 CSS(Cascading Style Sheets)是一种样式表语言,用于描述HTML或XML(包括如SVG、MathML等各种XML方言)文档的呈现。CSS控制网页的布局,包括字体...

    网站前端网页源码模板 (1318).zip

    网站前端网页源码模板是构建互联网页面的基础,它包含了HTML...对于初学者来说,理解和学习这些元素是迈入前端开发领域的第一步。对于经验丰富的开发者,这样的模板可以作为快速搭建新项目的基础,节省时间和提高效率。

    c# ThoughtWorks.QRCode生成二维码

    2. 创建QRCodeGenerator实例:这是生成二维码的第一步,你需要创建一个`QRCodeGenerator`对象,它是生成二维码的核心类。 3. 设置编码参数:你可以根据需求设置二维码的错误纠正级别(L、M、Q、H),以适应不同的...

    HTML,CSS,JavaScript学习

    CSS(Cascading Style Sheets)是用来描述HTML或XML...总之,HTML、CSS、JavaScript是构建Web应用的核心技术,掌握它们是开启互联网开发之门的第一步。不断学习和实践,你将能够创建出更具吸引力和功能性的网页。

    Web_Study_HTML_CSS_JAVASCRIPT

    了解HTML的语法规则和元素属性是创建网页内容的第一步。 2. **CSS(层叠样式表)**:CSS用于控制网页的外观和布局。通过选择器与HTML元素匹配,可以设置颜色、字体、大小、布局等样式属性。CSS3引入了许多新特性,...

    vue项目实现冒泡排序的可视化(bubbleSort)

    2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。 3. 针对所有的元素重复以上的步骤,除了最后一个。 4. 持续每次对越来越少的元素重复上面的步骤,直到没有...

    使用three.js 的 交互式 3D 心脏模型

    创建3D心脏模型的第一步是设置场景。你需要创建一个`THREE.Scene`实例,它是所有3D对象的容器。接下来,配置一个相机,如`THREE.PerspectiveCamera`,定义视口的视角、宽高比和近远裁剪平面。 为了构建心脏模型,...

    个人网页模板,个人静态网页模板,个人网站模板

    在构建个人在线存在时,一个吸引人的网页模板是至关重要的第一步。个人网页模板、个人静态网页模板以及个人网站模板,都是为了帮助用户快速且轻松地创建具有专业外观的网站而设计的。这些模板通常包含预先设计的布局...

    Android彩蛋效果,微信彩蛋效果

    1. **UI设计**:创建彩蛋效果的第一步是设计相关的图形元素,例如花瓣、彩蛋等。这通常需要用到Android的图形库,如SVG(可缩放矢量图形)或者自定义的Bitmap资源。这些资源需要根据需求设计成动态的,以便在执行...

Global site tag (gtag.js) - Google Analytics