我已经尝试阅读如何使用止损,并在此处查看其他答案。现在已经修补这个片段太久了。我似乎无法让这个动画始终平行。
它要么在某个点停止,要么在底线继续排队动画(参见下面的代码)。无论哪种方式,我都无法弄清楚在哪里停下来让它正常工作。
$(".property-wrapper").hover(function(e){
var lines = new Array();
lines.push($(this).find(".line-top"));
lines.push($(this).find(".line-left"));
lines.push($(this).find(".line-right"));
lines.push($(this).find(".line-bottom-right"));
lines.push($(this).find(".line-bottom-left"));
if(e.type == "mouseenter")
{
// Animate, starting from top, and going parallell towards the bottom. Then the bottom ones meet eachother.
// The motion forms a square
/*
Index 0 starts (from main.css) on left:50%; and animates to 0 while also animating width to 100%, giving
the illusion of it "shooting" out in both directions
Here is a representation of the indices and their direction of animation
<---------0--------->
1 2
| |
| |
| |
|4--------><-------3|
*/
$(lines[0]).animate({width:"100%", left:0}, 'fast', function(){
$(lines[1]).animate({height:"100%"}, 'slow' , function(){
$(lines[4]).animate({width:"50%"}, 'slow');
});
$(lines[2]).animate({height:"100%"}, 'slow', function(){
$(lines[3]).animate({width:"50%"}, 'slow');
});
});
}
else
{
// Reverse the animation on mouseenter
$(lines[3]).animate({width:0}, 'fast', function() {
$(lines[2]).animate({height:0}, 'slow', function(){
$(lines[0]).animate({width:0, left:"50%"}, 'fast');
});
});
$(lines[4]).animate({width:0}, 'fast', function() {
$(lines[1]).animate({height:0}, 'slow');
});
}
});
希望任何人都可以提供帮助!谢谢
编辑:这基本上是它的设置方式:
<div>
<div class="line-top"></div>
<div class="line-left"></div>
<div class="line-right"></div>
<div class="line-bottom-right"></div>
<div class="line-bottom-left"></div>
</div>
这是CSS。line div 的 parent 是相对定位的,而 lines 是绝对的,以控制相对于 parent 的位置。
.line-top, .line-left, .line-right, .line-bottom-right, .line-bottom-left
{ background:red; position:absolute; }
.line-top { height:1px; width:0; left:50%; top:0; }
.line-left { width:1px; height:0; left:0; top:0; }
.line-right { width:1px; height:0; right:0; top:0; }
.line-bottom-right { height:1px; width:0; right:0; bottom:0; }
.line-bottom-left { height:1px; width:0; left:0; bottom:0; }