基于SVG的web页面图形绘制API介绍及编程演示


Posted in Javascript onJune 28, 2013

一:什么是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>

运行效果:
基于SVG的web页面图形绘制API介绍及编程演示 
源代码,可以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>
Javascript 相关文章推荐
JavaScript Object的extend是一个常用的功能
Dec 02 Javascript
基于jquery的一个图片hover的插件
Apr 24 Javascript
JS简单实现String转Date的方法
Mar 02 Javascript
JS组件Bootstrap按钮组与下拉按钮详解
May 10 Javascript
Vue.js组件tree实现无限级树形菜单
Dec 02 Javascript
Bootstrap选项卡学习笔记分享
Feb 13 Javascript
angular中使用Socket.io实例代码
Jun 03 Javascript
前端开发不得不知的10个最佳ES6特性
Aug 30 Javascript
JavaScript 保护变量不被随意修改的实现代码
Sep 27 Javascript
jQuery中$原理实例分析
Aug 13 jQuery
微信小程序中weui用法解析
Oct 21 Javascript
浅谈vue单页面中有多个echarts图表时的公用代码写法
Jul 19 Javascript
纯JavaScript实现HTML5 Canvas六种特效滤镜示例
Jun 28 #Javascript
jquery中通过父级查找进行定位示例
Jun 28 #Javascript
javascript实现文字图片上下滚动的具体实例
Jun 28 #Javascript
JavaScript操纵窗口的方法小结
Jun 28 #Javascript
网站如何做到完全不需要jQuery也可以满足简单需求
Jun 27 #Javascript
js获取当前日期代码适用于网页头部
Jun 27 #Javascript
jquery仿QQ商城带左右按钮控制焦点图片切换滚动效果
Jun 27 #Javascript
You might like
Apache, PHP在Windows 9x/NT下的安装与配置 (二)
2006/10/09 PHP
PHP中使用addslashes函数转义的安全性原理分析
2014/11/03 PHP
浅析PHP数据导出知识点
2018/02/17 PHP
实例化php类时传参的方法分析
2020/06/05 PHP
document.documentElement &amp;&amp; document.documentElement.scrollTop
2007/12/01 Javascript
JavaScript DOM学习第八章 表单错误提示
2010/02/19 Javascript
你必须知道的Javascript知识点之&quot;this指针&quot;的应用
2013/04/23 Javascript
基于MVC3方式实现下拉列表联动(JQuery)
2013/09/02 Javascript
在父页面调用子页面的JS方法
2013/09/29 Javascript
JS+DIV实现鼠标划过切换层效果的实例代码
2013/11/26 Javascript
JS判断浏览器是否支持某一个CSS3属性的方法
2014/10/17 Javascript
JavaScript的RequireJS库入门指南
2015/07/01 Javascript
理解javascript模块化
2016/03/28 Javascript
Node.js下自定义错误类型详解
2016/10/17 Javascript
浅谈Node.js ORM框架Sequlize之表间关系
2017/07/24 Javascript
开发一个Parcel-vue脚手架工具(详细步骤)
2018/09/22 Javascript
javascript+HTML5 canvas绘制时钟功能示例
2019/05/15 Javascript
ES6 Map结构的应用实例分析
2019/06/26 Javascript
JS防抖和节流实例解析
2019/09/24 Javascript
微信小程序添加插屏广告并设置显示频率(一天一次)
2019/12/06 Javascript
详解Vue 的异常处理机制
2020/11/30 Vue.js
基于vue+echarts数据可视化大屏展示的实现
2020/12/25 Vue.js
js实现验证码干扰(动态)
2021/02/23 Javascript
详解Python中表达式i += x与i = i + x是否等价
2017/02/08 Python
Pycharm导入Python包,模块的图文教程
2018/06/13 Python
Pytorch evaluation每次运行结果不同的解决
2020/01/02 Python
使用py-spy解决scrapy卡死的问题方法
2020/09/29 Python
正宗的澳大利亚Ugg靴子零售商:UGG Express
2020/04/19 全球购物
医院护理人员的自我评价分享
2013/10/04 职场文书
毕业生求职信的经典写法
2014/01/31 职场文书
医学院毕业生自荐信范文
2014/03/06 职场文书
中学生国旗下讲话稿
2014/04/26 职场文书
手机销售员岗位职责
2015/04/11 职场文书
检讨书格式范文
2015/05/07 职场文书
工作犯错保证书
2015/05/11 职场文书
Windows Server 2019 安装DHCP服务及相关配置
2022/04/28 Servers