Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将SVG CSS动画转换为纯JS代码_Javascript_Css_Svg_Svg Animate - Fatal编程技术网

Javascript 如何将SVG CSS动画转换为纯JS代码

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路径动画转换为纯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" 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"})