2013-08-19 4 views
-1

Ниже приведена инструкция jQuery, которая скрывает элемент div в событии click. Я хочу, чтобы элемент исчезал независимо от того, не нажимается ли он через 5 секунд. Есть ли простой способ я могу назвать функцию fadeOut в том же выражении или без события click, мешающего анимации?Объединение действий над обработчиками событий в jQuery

$(".fadeOutbox").click(function(){ 
    $(this).fadeOut('slow'); 
}); 
+0

Вы хотите скрыть это при щелчке, но скрыть все равно, если он не щелкнет? Когда нужно знать? – Sergio

+0

Вам нужно запланировать таймаут после того, как какое-либо событие, которое я предполагаю, появится, вы ничего не указали. –

ответ

3

Я предполагаю, что это внутри другой функции, которая показывает окно, чтобы начать с. Это решение скроет окно через 5 секунд или сразу после нажатия.

var $box = $('.fadeOutbox'); 
var fadeOut = function() { 
    clearTimeout(timeout); 
    $box.fadeOut('slow'); 
}; 
var timeout = setTimeout(fadeOut, 5000); 
$box.click(fadeOut); 
+0

благодаря этим работам. –

1

Попробуйте

$('#div').delay(5000).fadeOut(400) 

Demo

+0

@ Микель Макс просит скрыть, если не нажал только – sdespont

2

Изменить, чтобы уточнить:

var clear = setTimeout(function(){ $(".fadeOutbox").fadeOut('slow'); }, 5000); 

$(".fadeOutbox").on('click', function(){ 
    clearTimeout(clear); 
}); 

Демо: http://jsfiddle.net/mGbHq/

+0

Уточненный. Либо это было отредактировано после того, как я это увидел, либо я пропустил это. Правильный ответ выше. –

2

Использование тайм-аута не внутри обработчика щелчка:

setTimeout(function() { 
    $(".fadeOutbox").fadeOut('slow'); 
}, 5000); 

Ваш код JQuery становится:

// set a timeout for 5 seconds 
setTimeout(function() { 
    $(".fadeOutbox").fadeOut('slow'); 
}, 5000); 

// attach click handler 
$(".fadeOutbox").on("click", function() { 
    $(this).fadeOut('slow'); 
}); 

JSFIDDLE

+0

это не работает –

+0

@MikelMax Используйте решение тайм-аута, решение 'delay()' блокирует анимацию щелчка мышью. –

2

Сохранить тот факт, что пользователь нажал или нет, и проверить его в таймере

var isClicked = false; 

setTimeout(function() { 
    if(!isClicked) 
     $(".fadeOutbox").fadeOut('slow'); 
}, 5000); 

$(".fadeOutbox").click(function() { 
isClicked = true; 
}); 
2

Попробуйте это:

var wasClicked = false; 
$(".fadeOutbox").click(function() { wasClicked = true; }); 

setTimeout(function() { 
    if(wasClicked = false) 
     $(".fadeOutbox").fadeOut('slow'); 
}, 5000); 
4

Большинство компонентов JQuery в цепи состоянии, ваши функции поскольку он возвращает ссылку на исходный объект.

Вы можете добиться того, что вы хотите, просто используя:

$(".fadeOutbox").click(function() { 
    $(this).stop().fadeOut('slow'); 
}).delay(5000).fadeOut('slow'); 

В основном гласит OnClick, исчезать в противном случае исчезают через 5 секунд.

+1

Не используйте функцию задержки, потому что анимация из обработчика кликов не будет работать: http://jsfiddle.net/KSEXY/1/ –

+0

@ Джон ツ хорошо замечен - обновлен и отлично работает :) – Emissary

+0

Хорошо! Голосование! –

2

Попробуйте использовать переменную для таймаута и очищать ее каждый раз, когда пользователь нажимает.

Working example

// Timeout variable 
var t; 

$('.fadeOutBox').click(function() 
{ 
    $box = $(this); 
    $box.fadeIn("fast"); 

    // Reset the timeout 
    clearTimeout(t); 
    t = setTimeout(function() 
    { 
     $box.fadeOut("slow"); 
    }, 5000); 
}); 

Надеется, что это помогает.

2

Ничего себе, ни один из ответов не дает простое решение: Используйте setTimeout и отменить тайм-аут по щелчку:

$(".fadeOutbox").click(function() { 
    // Cache the jQuery object 
    var $this = $(this); 

    // Do we already have a timer running? 
    var timer = $this.data("timer"); 
    if (timer) { 
     // Yes, cancel it 
     clearTimeout(timer); 
     $this.removeData("timer"); 
    } 

    // (You may want an `else` here, it's not clear) 

    // In five seconds, fade out 
    $this.data("timer", setTimeout(function() { 
     $this.removeData("timer"); 
     $this.fadeOut('slow'); 
    }, 5000)); 
}); 

Я не 100% уверен, что выше запуска на события, которые вы хотите, но две части соответствующего кода являются это, что график приурочен действий:

// In five seconds, fade out 
$this.data("timer", setTimeout(function() { 
    $this.removeData("timer"); 
    $this.fadeOut('slow'); 
}, 5000)); 

и это, который отменяет его (например, по щелчку):

var timer = $this.data("timer"); 
if (timer) { 
    // Yes, cancel it 
    clearTimeout(timer); 
    $this.removeData("timer"); 
} 
Смежные вопросы