Mar*_*ura 3 javascript svg raphael snap.svg
背景:我正在使用snap.svg为内联svg中的路径设置动画,我正在尝试在一个函数中设置几个路径的动画.
问题:使用下面的代码,我只能在一个抓取功能中选择一个路径.在下面的代码中,我使用了多个选择器,但动画只影响rect#rect-one.如何在Snap.svg中选择多个路径?
谢谢您的帮助!
HTML /内联SVG:
<a id="one">link</a>
<svg>
<rect id="rect-one" fill="#231F20" width="39" height="14"/>
<rect id="rect-two" x="54" fill="#231F20" width="39" height="14"/>
<rect id="rect-three" x="104" fill="#231F20" width="39" height="14"/>
</svg>
Run Code Online (Sandbox Code Playgroud)
Snap:
window.onload = function () {
var grabLink = Snap.select('body a#one'),
grabPathRectangles = Snap.select('#rect-one, #rect-two, #rect-three');
function colorPathRectangles(){
grabPathRectangles.animate({fill: 'red'}, 100, mina.ease);
}
function resumePathRectangles(){
grabPathRectangles.animate({fill: 'green'}, 100, mina.ease);
}
grabLink.hover(colorPathRectangles, resumePathRectangles);
};
Run Code Online (Sandbox Code Playgroud)
我认为问题在于你不能将动画应用于集合(编辑:现在可能),因此你必须将它应用于每个元素.为此你可以使用forEach命令,所以......
grabPathRectangles.forEach( function(elem,i) {
elem.animate({fill: 'red'}, 1000, mina.ease);
});
Run Code Online (Sandbox Code Playgroud)
Jsfiddle在这里... http://jsfiddle.net/DZ4wZ/3/
或者我怀疑你可以将它们组成一个组,并将该组动画为一个,如果这更有意义的话.这是一个例子http://jsfiddle.net/DZ4wZ/5/但是,我不得不删除原始填充.
编辑:看起来你现在可以将动画应用到一个集合,我认为这个功能不常用,或者是有缺陷的,所以不是历史使用的.因此,如果使用它,您可能需要确保拥有最新版本的Snap.
不幸的是,@ Ian的答案是不正确的,尽管他的小提琴默默地解决了实际问题.
问题是您已经使用Snap.select而不是Snap.selectAll查询多个元素.Select将只返回满足选择器的第一个实例,而selectAll将获取所有这些实例并返回Element对象的集合或数组.这就是为什么只有一个元素响应动画.
此外,你绝对可以同时调用animate一组元素,因此不需要使用额外的for循环来复杂化.
来自以下文档Set.animate():
动画集同步中的每个元素.
它首先记录select和SelectAll的不同输出
console.log("select: ", Snap.select( '#rect-1, #rect-2, #rect-3'));
console.log("selectAll: ", Snap.selectAll('#rect-1, #rect-2, #rect-3'));
var grabLink = Snap.select('#one'),
grabPathRectangles = Snap.selectAll('#rect-1, #rect-2, #rect-3');
function colorPathRectangles(){
grabPathRectangles.animate({fill: 'red'}, 1000, mina.ease);
}
function resumePathRectangles(){
grabPathRectangles.animate({fill: 'green'}, 1000, mina.ease);
}
grabLink.hover(colorPathRectangles, resumePathRectangles); Run Code Online (Sandbox Code Playgroud)
a#one {
display: block;
border: 1px solid blue;
margin-bottom: 15px;
}Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/snap.svg/0.3.0/snap.svg-min.js"></script>
<a id="one">Hover Me</a>
<svg>
<rect id="rect-1" fill="#231F20" width="39" height="14"/>
<rect id="rect-2" fill="#231F20" width="39" height="14" x="54" />
<rect id="rect-3" fill="#231F20" width="39" height="14" x="104" />
</svg>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10041 次 |
| 最近记录: |