基于SVG的web页面图形绘制API介绍

简介: 基于SVG的web页面图形绘制API介绍

一:什么是SVG


SVG是1999由W3C发布的2D图形描述语言,纯基于XML格式的标记语言,SVG的


全称是可扩展的矢量图形跟传统的Raster方式的图形(JPG, PNG, GIF等)有很大的差


别。SVG是2D图形开发平台,包括两个部分,一个是基于XML语言的数据描述,另


外一部分是可编程的API,其关键特性支持图形,文本,梯度填充,画笔风格,图形


特效滤镜如高斯模糊,会在稍后的代码中演示。同时还支持各种鼠标事件与DOM部


分API。几乎所有的主流浏览器都支持SVG图形格式的现实与绘制,IE9+以上也开始


支持SVG,在低版本的IE中需要插件支持。


更多了解SVG访问这里:http://www.w3.org/Graphics/SVG/About.html



二:JavaScript中SVG API编程演示


创建与获取SVG对象


// create svg object


var mySvg = document.createElementNS("http://www.w3.org/2000/svg","svg");


mySvg.setAttribute("version","1.2");// IE9+ support SVG 1.1 version


mySvg.setAttribute("baseProfile","tiny");


container.appendChild(mySvg);



在SVG中创建一个矩形图形:


var c1 = document.createElementNS("http://www.w3.org/2000/svg","rect");


c1.setAttribute("x","20");


c1.setAttribute("y","20");


c1.setAttribute("width","150");


c1.setAttribute("height","150");


c1.setAttribute("fill","rgb(0,0,255)");


c1.setAttribute("stroke","rgb(0,0,0)");


c1.setAttribute("stroke-width","4");


mySvg.appendChild(c1);



在SVG中实现文本绘制:


// SVG draw text


var stext = document.createElementNS("http://www.w3.org/2000/svg","text");


stext.setAttribute("x","700");


stext.setAttribute("y","100");


stext.setAttribute("font-size","18px");


stext.setAttribute("fill","#FF0000");


var textString = document.createTextNode("Hello SVG");


stext.appendChild(textString);


mySvg.appendChild(stext);



在SVG对象上实现鼠标点击事件处理与MouseUp事件处理:


// mouse event handling


c1.addEventListener("click",changeColor,false);


c2.addEventListener("mouseup", changeColor,false);



通过SVG 图形滤镜实现高斯模糊:

        <div id="blur-image-demo">
          <div id="left" style="width:20%;"><img src="woniu.png" alt="Original image" width="325" height="471"></div>
          <div id="right" style="width:80%;">
            <svg xmlns="http://www.w3.org/2000/svg" version="1.1">
          <defs>
            <filter id="f1" x="0" y="0">
              <feGaussianBlur in="SourceGraphic" stdDeviation="5" />
            </filter>
          </defs>
          <image x="0" y="0" width="325" height="471" xlink:href="woniu.png" filter="url(#f1)"/>
        </svg>
      </div> 
    </div>

运行效果:

源代码,可以copy直接运行

JavaScript部分

            window.onload = function() {
              // get DIV
              var container = document.getElementById("svgContainer");
 
              // create svg object
              var mySvg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
              mySvg.setAttribute("version", "1.2");// IE9+ support SVG 1.1 version
              mySvg.setAttribute("baseProfile", "tiny");
              container.appendChild(mySvg);
              
              // create svg shape - rectangle
        var c1 = document.createElementNS("http://www.w3.org/2000/svg", "rect");
              c1.setAttribute("x", "20");
              c1.setAttribute("y", "20");
              c1.setAttribute("width", "150");
              c1.setAttribute("height", "150");
              c1.setAttribute("fill", "rgb(0,0,255)");
              c1.setAttribute("stroke", "rgb(0,0,0)");
              c1.setAttribute("stroke-width", "4");
              mySvg.appendChild(c1);
              
              // create svg shape - circle
              var c2 = document.createElementNS("http://www.w3.org/2000/svg", "circle");
              c2.setAttribute("cx", "250");
              c2.setAttribute("cy", "100");
              c2.setAttribute("r", "60");
              c2.setAttribute("fill", "#996699");
              c2.setAttribute("stroke", "#AA99FF");
              c2.setAttribute("stroke-width", "7");
              mySvg.appendChild(c2);
              
              // create svg shape - ellipse
              var c3 = document.createElementNS("http://www.w3.org/2000/svg", "ellipse");
              c3.setAttribute("cx", "450");
              c3.setAttribute("cy", "100");
              c3.setAttribute("rx", "100");
              c3.setAttribute("ry", "50");
              c3.setAttribute("fill", "#FF0000");
              c3.setAttribute("stroke", "purple");
              c3.setAttribute("stroke-width", "3");
              mySvg.appendChild(c3);
              
              // create svg shape - draw lines
              for(var i=0; i<10; i++)
        {
                var sline = document.createElementNS("http://www.w3.org/2000/svg", "line");
                var x1 = 580 + i*10;
                console.log(x1);
                
                sline.setAttribute("x1", x1.toString());
                sline.setAttribute("y1", "10");
                sline.setAttribute("x2", x1.toString());
                sline.setAttribute("y2", "180");
                sline.setAttribute("stroke", "rgb(0,255,0)");
                sline.setAttribute("stroke-width", "2");
                  mySvg.appendChild(sline);
        }
              
            // SVG draw text
            var stext = document.createElementNS("http://www.w3.org/2000/svg", "text");
            stext.setAttribute("x", "700");
            stext.setAttribute("y", "100");
            stext.setAttribute("font-size", "18px");
            stext.setAttribute("fill", "#FF0000");
            var textString = document.createTextNode("Hello SVG");
            stext.appendChild(textString);
            mySvg.appendChild(stext);
              
              // mouse event handling
              c1.addEventListener("click", changeColor, false);
              c2.addEventListener("mouseup", changeColor, false);
            };
            
            function changeColor(evt) {
                var target = evt.target;
                target.setAttributeNS(null, "fill", "green");
            }

HTML部分:

 <html>
    <head>
        <title>Gloomyfish SVG Demo</title>
        
        <style>
            #svgContainer {
                width:800px;
                height:200px;
                background-color:#EEEEEE;
            }
            
            #left { float: left;} 
      #right { float: right;} 
        </style>       
    </head>
    <body>
        <div id="svgContainer"></div>
        <div id="blur-image-demo">
          <div id="left" style="width:20%;"><img src="woniu.png" alt="Original image" width="325" height="471"></div>
          <div id="right" style="width:80%;">
            <svg xmlns="http://www.w3.org/2000/svg" version="1.1">
          <defs>
            <filter id="f1" x="0" y="0">
              <feGaussianBlur in="SourceGraphic" stdDeviation="5" />
            </filter>
          </defs>
          <image x="0" y="0" width="325" height="471" xlink:href="woniu.png" filter="url(#f1)"/>
        </svg>
      </div> 
    </div>
    </body>
</html>
 

转载请务必注明出处

相关文章
|
3天前
|
存储 前端开发 搜索推荐
Web前端网站(一) - 登录页面及账号密码验证
页面背景动态是烟花和文字特效与缓缓下落的雪花相结合,在登录表单的旁边还有五个白色光圈以不规则的方式环绕,当鼠标靠近时,会发出彩色的光芒~~~
21 1
Web前端网站(一) - 登录页面及账号密码验证
|
11天前
jetty内嵌web页面服务入门
jetty内嵌web页面服务入门
12 1
|
13天前
|
SQL 缓存 测试技术
RESTful API设计的最佳实践:构建高效、可维护的Web服务接口
【6月更文挑战第11天】构建高效、可维护的RESTful API涉及多个最佳实践:遵循客户端-服务器架构、无状态性等REST原则;设计时考虑URL结构(动词+宾语,使用标准HTTP方法)、使用HTTP状态码、统一响应格式及错误处理;确保数据安全(HTTPS、认证授权、输入验证);实施版本控制;并提供详细文档和测试用例。这些实践能提升Web服务接口的性能和质量。
|
17天前
|
JSON 前端开发 API
Apache HttpClient调用Spring3 MVC Restful Web API演示
Apache HttpClient调用Spring3 MVC Restful Web API演示
17 1
|
18天前
|
Web App开发 JavaScript 前端开发
Web 页面性能衡量指标-以用户为中心的性能指标
Web 页面性能衡量指标-以用户为中心的性能指标 以用户为中心的性能指标是理解和改进站点体验的关键点 一、以用户为中心的性能指标 1. 指标是用来干啥的? 指标是用来衡量性能和用户体验的 2. 指标类型 • 感知加载速度:网页可以多快地加载网页中的所有视觉元素并将其渲染到屏幕上 • 加载响应速度:页面加载和执行组件快速响应用户互动所需的 JavaScript 代码的速度 • 运行时响应速度:网页在加载后对用户互动的响应速度 • 视觉稳定性:页面上的元素是否会以用户意想不到的方式发生偏移,是否可能会干扰用户的互动? • 流畅性:过渡和动画是否以一致的帧速率渲染,并在一种状态之间流畅地流动
19 1
|
25天前
|
机器学习/深度学习 SQL 人工智能
Web LLM 实验:利用 LLM API 实现命令注入
Web LLM 实验:利用 LLM API 实现命令注入
|
7天前
|
前端开发 JavaScript API
2024 Web 新特性 - 使用 Popover API 创建弹窗
Popover API简化了Web弹窗创建,标准化处理在所有主要浏览器中可用。它提供声明式创建弹出式菜单、提示和信息卡片,解决代码冗余和兼容性问题。弹窗自动定位在顶层,支持通过Esc键或点击外部关闭,且与触发元素语义关联。基础用法涉及`popover`和`popovertarget`属性。
17 0
|
20天前
|
XML JSON API
RESTful API关键部分组成和构建web应用程序步骤
RESTful API关键部分组成和构建web应用程序步骤
15 0
|
Web App开发 JavaScript 前端开发
ASP.NET MVC Web API 学习笔记---第一个Web API程序
1. Web API简单说明 近来很多大型的平台都公开了Web API。比如百度地图 Web API,做过地图相关的人都熟悉。公开服务这种方式可以使它易于与各种各样的设备和客户端平台集成功能,以及通过在浏览器中使用 JavaScript来创建更丰富的HTML体验。
1118 0