私の意見では、あなたのコードは十分に効率的であるため、あなたがする必要があるのは、ホバーのアクションを停止するよりも、クリックされたかどうかを確認するためにクラスを追加するだけです。
jQuery:
$("#down").hover(
function() {
$(this).stop().animate({top:0},200);
},
function() {
// this will alert the situation for you to understand
alert($(this).hasClass("isDown"));
// if its clicked than do not move!
if ($(this).hasClass("isDown") == false) {
$(this).stop().animate({top:-5},220);
}
}
);
$("#down").click(
function() {
$("#DropUp").stop().animate({bottom:-250},220);
// Add a class to see if its clicked
$(this).toggleClass("isDown");
}
);
あなたのフィドルを回避しました:http://jsfiddle.net/9DN52/14/
編集:
また、いくつかのバグを解決し、いくつかのコードを修正し、説明を追加しました。実際にやりたいことはこれだと思いました。
jQuery:
// Actually you can do this with css transition
// Remove these descriptions for a cleaner looking code
$("#down").hover(
function() { $(this).stop().animate({top:0},200); },
function() {
// if its clicked than do not move!
if ($(this).hasClass("isDown") == false) {
$(this).stop().animate({top:-5},220);
}
}
);
// Instead of toggle simple click action is enough
$("#down").click( function() {
// Thanks to class selector now we know
// if its clicked or down, so we know what to do..
if ($("#down").hasClass("isDown") == false) {
$("#DropDown").stop().animate({top:0},250);
// if footer is up already this will hide it
$("#DropUp").stop().animate({bottom:-250},220);
$("#up").removeClass("isUp");
} else {
$("#DropDown").stop().animate({top:-250},220);
}
// Each click should change the down situation
$("#down").toggleClass("isDown");
});
// Instead of toggle simple click action is enough
$("#up").click( function() {
// If its up already
if ($(this).hasClass("isUp") == false) {
$("#DropUp").stop().animate({bottom:0},250);
// if header is down already this will hide it
$("#DropDown").stop().animate({top:-250},220);
$("#down").stop().animate({top:-5},220).removeClass("isDown");
} else {
$("#DropUp").stop().animate({bottom:-250},220);
}
// Each click should change the up situation
$("#up").toggleClass("isUp");
});
フィドル: http: //jsfiddle.net/9DN52/43/