delay()
работает в очереди fx
по умолчанию. removeClass
не добавляется ни в какие очереди, поэтому delay()
не может измениться без каких-либо изменений.
Вы можете либо:
- Добавить вызов
removeClass
в очередь fx
вручную
- Вместо этого используйте
setTimeout
.
Решение 1 Обратите внимание также на перестановку delay
в цепочке jQuery! :
$(this).find(".caption").slideUp().end().siblings('.module').delay(1000).queue(function () {
$(this).removeClass('under').dequeue(); // dequeue is IMPORTANT!
});
Решение 2:
$(".module").hover(function() {
$(this).find(".caption").slideDown().end().siblings('.module').addClass('under');
},function() {
var self = $(this).find(".caption").slideUp().end().siblings('.module');
setTimeout(function () {
self.removeClass('under');
}, 1000);
});
Обратите внимание, что оба решения дадут странные (но разные) эффекты, если кто-то наведет курсор мыши на несколько раз. Чтобы решить проблемы с # 1, добавьте .stop().clearQueue()
в цепочку при наведении мыши. Чтобы решить # 2, сохраните ссылку на тайм-аут и наведите курсор мыши на clearTimeout(theVariable)
.