私が過去に行った1つの方法は、オープンボックスにマーカーcssクラスを追加することです。jQuery animateを使用している場合は、完全なコールバックを使用して、開いたばかりの要素にクラスを追加することで、これを簡単に行うことができます。
それができたら、アニメーションをトリガーするクリックハンドラーで、次の手順を実行します。1)クリックされた/開いている要素にクラスが開いているかどうかを確認し、開いている場合は、これを示す一時的なフラグを設定します。 。
2)開かれたクラスを持つすべての要素に対してjQuery検索を実行し、それらの閉じをアニメーション化します。
3)クリックした要素がまだ開いていないことをフラグが示している場合は、開いているアニメーションを作成します。それ以外の場合は何もしません。
これは、クリックすると大きくなり、半透明になる複数のdivがある単純な例ですが、一度に大きくできるのは1つだけであり、すでに展開されている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/