基于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 相关文章推荐
利用jQuery的deferred对象实现异步按顺序加载JS文件
Mar 17 Javascript
如何使用Javascript获取距今n天前的日期
Jul 08 Javascript
javaScript面向对象继承方法经典实现
Aug 20 Javascript
JS控制图片等比例缩放的示例代码
Dec 24 Javascript
alert和confirm功能介绍
May 21 Javascript
用jquery模仿的a的title属性的例子
Oct 22 Javascript
JavaScript对表格或元素按文本,数字或日期排序的方法
May 26 Javascript
简单谈谈ES6的六个小特性
Nov 18 Javascript
解决拦截器对ajax请求的拦截实例详解
Dec 21 Javascript
Vue项目数据动态过滤实践及实现思路
Sep 11 Javascript
使用pkg打包Node.js应用的方法步骤
Oct 19 Javascript
通过javascript实现段落的收缩与展开
Jun 26 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
别人整理的服务器变量:$_SERVER
2006/10/20 PHP
php导出中文内容excel文件类实例
2015/07/06 PHP
8个必备的PHP功能开发
2015/10/02 PHP
mongodb和php的用法详解
2019/03/25 PHP
Array.prototype.concat不是通用方法反驳[译]
2012/09/20 Javascript
nodejs中exports与module.exports的区别详细介绍
2013/01/14 NodeJs
Enter转换为Tab的小例子(兼容IE,Firefox)
2013/11/14 Javascript
jQuery中click事件的定义和用法
2014/12/20 Javascript
JavaScript 链式结构序列化详解
2016/09/30 Javascript
jquery动态创建div与input的实例代码
2016/10/12 Javascript
微信小程序  modal弹框组件详解
2016/10/27 Javascript
webpack独立打包和缓存处理详解
2017/04/03 Javascript
详解Webpack DLL用法以及功能
2017/07/11 Javascript
create-react-app修改为多页面支持的方法
2018/05/17 Javascript
JS 逻辑判断不要只知道用 if-else 和 switch条件判断(小技巧)
2020/05/27 Javascript
[00:14]PWL:老朋友Mushi拍VLOG与中国玩家问好
2020/11/04 DOTA
python发送arp欺骗攻击代码分析
2014/01/16 Python
Python threading多线程编程实例
2014/09/18 Python
Python3.5运算符操作实例详解
2019/04/25 Python
python+selenium实现简历自动刷新的示例代码
2019/05/20 Python
如何用Python来理一理红楼梦里的那些关系
2019/08/14 Python
python多继承(钻石继承)问题和解决方法简单示例
2019/10/21 Python
python 利用turtle模块画出没有角的方格
2019/11/23 Python
django框架中间件原理与用法详解
2019/12/10 Python
python 实现将Numpy数组保存为图像
2020/01/09 Python
python实现音乐播放和下载小程序功能
2020/04/26 Python
HTML5在IE10、火狐下中文乱码问题的解决方法
2013/11/18 HTML / CSS
HTML5实现动画效果的方式汇总
2016/02/29 HTML / CSS
波兰品牌内衣及泳装网上商店:Astratex.pl
2017/02/03 全球购物
Mio Skincare美国官网:身体紧致及孕期身体护理
2017/03/05 全球购物
四年大学自我鉴定
2014/02/17 职场文书
出生证明公证书
2014/04/09 职场文书
师恩难忘教学反思
2014/04/27 职场文书
摘录式读书笔记
2015/07/01 职场文书
光之国的四大叛徒:第一贝利亚导致宇宙毁灭,赛文奥特曼在榜
2022/03/18 日漫
彻底弄懂Python中的回调函数(callback)
2022/06/25 Python