Javascript 如何将SVG CSS动画转换为纯JS代码
我想将svg路径动画转换为纯javascript动画 SVG代码:Javascript 如何将SVG CSS动画转换为纯JS代码,javascript,css,svg,svg-animate,Javascript,Css,Svg,Svg Animate,我想将svg路径动画转换为纯javascript动画 SVG代码: <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="340px" height="333px" viewBox="0 0 340 333" enable-background="new 0 0 340 333"
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="340px" height="333px" viewBox="0 0 340 333" enable-background="new 0 0 340 333" xml:space="preserve">
<path class="path" fill="#FFFFFF" stroke="#000000" stroke-width="4" stroke-miterlimit="10" d="M66.039,133.545c0,0-21-57,18-67s49-4,65,8
s30,41,53,27s66,4,58,32s-5,44,18,57s22,46,0,45s-54-40-68-16s-40,88-83,48s11-61-11-80s-79-7-70-41
C46.039,146.545,53.039,128.545,66.039,133.545z"/>
</svg>
这是我强烈建议您尝试一下Raphael.js库的 使用它你可以很容易地复制你想要的 此外,还有一个非常有用的工具可以将SVG文件转换为Raphael.js可重用代码: 因此,您的SVG文件将成为:
var rsr = Raphael('rsr', '340', '333');
var path_a = rsr.path("M66.039,133.545c0,0-21-57,18-67s49-4,65,8s30,41,53,27s66,4,58,32s-5,44,18,57s22,46,0,45s-54-40-68-16s-40,88-83,48s11-61-11-80s-79-7-70-41C46.039,146.545,53.039,128.545,66.039,133.545z");
path_a.attr({
class: 'path',
fill: '#FFFFFF',
stroke: '#000000',
"stroke-width": '4',
"stroke-miterlimit": '10',
'stroke-opacity': '1'
}).data('id', 'path_a');
var rsrGroups = [];
然后,您只需将
添加到文档中,并将CSS选择器.path
替换为path
瞧
检查此小提琴以查看其作用:
您可以查看一些javascript SVG库。我偏爱拉斐尔(www.raphaeljs.com) 应该是这样的:
var paper = Raphael('canvas', 600, 600);
paper.path("M66.039,133.545c0,0-21-57,18-67s49-4,65,8s30,41,53,27s66,4,58,32s- 5,44,18,57s22,46,0,45s-54-40-68-16s-40,88-83,48s11-61-11-80s-79-7-70-41C46.039,146.545,53.039,128.545,66.039,133.545z")
.attr({fill:"#FFFFFF", stroke: "#000000", "stroke-width": "4", "stroke-miterlimit": "10"})
小提琴:
(注意:我在html中添加了一个div作为raphael“canvas”的容器,并将css更改为应用于“path”元素,而不是类为“.path”的元素。)我不确定您为什么需要纯javascript,而且这个答案可能不适合您的需要,因为它实际上创建了内联css。但在这里,它主要来自:
函数dashOffset(){
var path=document.querySelector('.path');
var length=“1000”;
//清除以前的任何转换
path.style.transition=path.style.WebkitTransition='none';
//设置起始位置
path.style.strokeDasharray=“10”;
path.style.strokedashcoffset=“1000”;
//触发布局,以便在浏览器中计算样式
//在设置动画之前拾取起始位置
getBoundingClientRect();
//定义我们的过渡
path.style.transition=path.style.WebKittTransition='stroke dashoffset 10s linear';
//侦听器重新启动循环
path.addEventListener('transitionend',dashOffset,false);
//走!
path.style.strokedashcoffset='0';
}
dashOffset()代码>
使用Raphael不是纯粹的JS,fiddle不起作用。啊,对不起,这个fiddle对我起作用,但我错过了保存按钮。我已经用一个新链接更新了我的答案。正如Scott所说,RaphaelJS是一个完全用纯Javascript编写的库。不需要依赖项,但可能您没有在浏览器中工作。例如,如果您所处的环境是移动应用程序中的WebView,那么Kaido应该适合您的需要。使用Raphael不是纯粹的JS。对不起,是的。这是一个完全用Javascript编写的解决方案。如果您不想使用库,那么可以使用javascript重新构建svg html。这实际上是图书馆所做的,但如果你坚持的话。
var paper = Raphael('canvas', 600, 600);
paper.path("M66.039,133.545c0,0-21-57,18-67s49-4,65,8s30,41,53,27s66,4,58,32s- 5,44,18,57s22,46,0,45s-54-40-68-16s-40,88-83,48s11-61-11-80s-79-7-70-41C46.039,146.545,53.039,128.545,66.039,133.545z")
.attr({fill:"#FFFFFF", stroke: "#000000", "stroke-width": "4", "stroke-miterlimit": "10"})