我过去做过的一种方法是将标记 css 类添加到打开的框中。如果您使用 jQuery animate,您可以轻松地做到这一点,方法是使用完整的回调将类添加到您刚刚打开的元素中。
一旦你有了它,你的逻辑,在触发动画的单击处理程序中,执行以下操作:1)检查被单击/正在打开的元素是否具有打开的类,如果是,则设置一些临时标志来指示这一点.
2) 对所有具有打开类的元素进行 jQuery 搜索,并为它们的关闭设置动画。
3)如果您的标志告诉您单击的元素尚未打开,请为其打开设置动画,否则什么也不做。
这是一个简化的示例,我有多个 div 在单击时会变大和半透明,但一次只能有一个很大,单击已经展开的 div 会将其缩小回正常状态。
$('div').on('click', pop);
function pop(event) {
debugger;
var alreadyPopped = false;
if ($(event.target).hasClass('popped')) {
alreadyPopped = true;
}
$('.popped').animate({
height: 50, width: 50, opacity: 1
}, 1000, "linear", function(e) {
$('.popped').removeClass('popped');
});
if (!alreadyPopped) {
$(event.target).animate({
height: 200, width: 200, opacity: 0.5
}, 1000, "linear", function(e) {
$(event.target).addClass('popped');
});
}
}
现场演示:http: //jsfiddle.net/ijoukov/zA87j/1/