!DOCTYPE HTML
站在用户的角度思考问题,与客户深入沟通,找到金秀网站设计与金秀网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:做网站、成都网站设计、企业官网、英文网站、手机端网站、网站推广、域名申请、网络空间、企业邮箱。业务覆盖金秀地区。
html
head
title/title
link href="css/reset.css" rel="stylesheet" type="text/css"
link href="css/layout.css" rel="stylesheet" type="text/css"
link href="css/style.css" rel="stylesheet" type="text/css"
script src="js/jquery.js" type="text/javascript" /script
script src="js/jquerysvg/jquery.svg.js" type="text/javascript" /script
script src="js/jquery-ui.js" type="text/javascript" /script
script type="text/javascript"
jQuery(document).ready(function(){
$('#target').svg({onLoad: drawInitial});
$('circle').click(function(e){
drawShape(e);
var shape = this.id;
});
$('.drag').mousedown(function(e){
var shape = this.id;
this.setAttribute("cx", e.pageX);
this.setAttribute("cy", e.pageY);
});
})
function drawInitial(svg) {
svg.add($('#svginline'));
}
function drawShape(e) {
var svg = $("#target").svg('get');
$('#result').text(e.clientX + ": " + e.pageX);
var dragme = svg.circle(e.clientX, e.clientY, 5, {fill: 'green', stroke: 'red', 'stroke-width': 3, class_: 'drag'});
//$(dragme).draggable();
}
/script
/head
body
div id="target" /div
svg:svg id="svginline"
svg:circle id="circ11" class="area" cx="75" cy="75" r="50" stroke="black" stroke-width="2" fill="red"/
/svg:svg
div id="result" ffff/div
/body
/html
之前普通dom节点用jquery来写,svg之类的节点操作用d3.js来写,然后现在尝试写一个小组件,就想写个不依赖任何库的版本。
之前用d3.js来写可视化组件,有着库依赖的问题,这次想自己把库的依赖去掉,用原生态javascript写。
然后第一件事情我就懵逼了,用jquery的 $("svg/svg ) 生成也是一样。
然后出来的是一个普通标签名叫svg的标签,没有svg的任何渲染
而本来应该是下图的效果的。
然后就顺便普及了svg的知识,svg虽然和dom元素很像,但是实际上是xml,它比html更加严格,有着自己的命名空间,如果你在html里面直接写,那么会被加上命名空间解析,如果你想要用js来创建,那么你就得自己来写。
我写的是一个词云插件,我的算法是根据一个text来判断碰撞与否,所以我要知道两个text的位置和高度和宽度。
对于普通的元素,可以通过jquery.css("width")来实现,但是这个对于svg元素,jquery也再一次失效。而这个时候,getBoundingClientRect(),就起效了。
首先,jquery是操作普通xhtml的,对应svg这种特殊的标签,或者说xml,浏览器如何区分,当然是通过命名空间:namespaceURI,比如普通html的是,而svg也有自己的命名空间:,jquery在操作的时候没有加以区分,因此导致了这样的错误。怎么办,使用setAttributeNS创建svg标签即可。
其次,我们创建大量标签的时候,喜欢innerHTML=template这种方式,svg也可以,应该说大部分浏览器都可以,可是有些浏览器不可以,我们就需要自己提供兼容的innerSVG方法了。
最后,关于上面说的二点,你都可以对比这个例子。
看到网页上炫酷的图形轮廓线路径动画你是否会动心,想要自己来制作一个呢?其实这个特效实现起来并不难,使用轻量级HTML5插件jquery-drawsvg就可以实现了,jquery-drawsvg是一款轻量级的使用jQuery来绘制SVG图形轮廓线路径动画的插件。该插件使用jQuery内置的动画引擎来使SVG元素中path元素产生动画,其底层实现使用的是stroke-dasharray和stroke-dashoffset属性。
该SVG路径动画插件的特点有:
轻量级,压缩后小于2kb
使用简单
支持Easing过渡动画效果
演示地址:
插件下载地址:
使用方法:
使用该SVG图形轮廓线路径动画插件需要引入jQuery和jquery.drawsvg.js文件。
script src="js/jquery.min.js"/script
script src="js/jquery.drawsvg.js"/script
初始化插件
在页面DOM元素加载完毕之后,可以通过下面的方法来使SVG图形生成轮廓线动画效果。
首先将初始化的对象实例保存为一个变量:
var mySVG = $('#my_svg_element').drawsvg();
然后就可以执行动画效果了:
mySVG.drawsvg('animate');
配置参数
下面是该SVG路径动画创建的可用配置参数:
参数类型默认值描述durationInteger1000完成每一个路径动画的持续时间staggerInteger200每一个路径动画开始前的延迟时间easingStringswing使用jQuery
Easing插件的过渡动画效果reverseBooleanfalse是否反向绘制callbackFunctionfunction()
{}路径动画完成之后的回调函数
svg可以转成canvas,canvas再转图片!
var svgHtml = svgContainer.innerHTML();//获取svg
将svg转成canvas需要用到google的一个插件canvg,可以上官网下载
接下来就是调用该插件的canvg(canvasId,svgHtml)方法来转成canvas,这个方法第一个参数就是canvas标签的id!
var imgSrc = document.getElementById(content).toDataUrl("image/png");//将canvas转成图片
var _o = document.getElementById('test');//元素ID
var list = _o.attributes;
for(var i = 0 ; i list.length ; i++){
alert(list[i].name+'='+list[i].value);
}