задержка () или тайм-аут с остановкой ()?

$('.file a').live('mouseenter', function() {
    $('#download').stop(true, true).fadeIn('fast');
}).live('mouseleave', function() {
    $('#download').stop(true, true).fadeOut('fast');
});

Я хочу mouseenter функция, чтобы иметь a stop() и задержка 1 секунды. Так, если я толплюсь #download fadeIn должен запуститься после 1 второй задержки. Если я мышь между тем fadeIn не должен запускаться. Получите меня?

Я действительно не знаю, как сделать это, какие-либо идеи?

20
задан Hidden Hobbes 27 April 2015 в 10:51
поделиться

2 ответа

Вам нужно использовать setTimeout() в этом случае из-за того, как работает .delay() (и вашей невозможности отменить его).

$('.file a').live('mouseenter', function() {
  $.data(this, 'timer', setTimeout(function() {
      $('#download').stop(true, true).fadeIn('fast');
  }, 1000));
}).live('mouseleave', function() {
  clearTimeout($.data(this, 'timer'));
  $('#download').stop(true, true).fadeOut('fast');
});

Вы можете попробовать это здесь.

Если вы используете .delay() это приведет к декею следующей анимации для элемента, независимо от того, очистили ли вы эту очередь ранее. Поэтому вам нужен таймаут, который вы можете отменить, что и делается в приведенном выше примере, вызывая вручную setTimeout() и сохраняя результат в $.data() чтобы вы могли очистить его позже, через clearTimeout().

25
ответ дан 30 November 2019 в 00:27
поделиться

Используйте функцию setTimeout

$('.file a').live('mouseenter', function() {
setTimeout(function(){
    $('#download').stop(true, true).fadeIn('fast');
}, 1000);
}).live('mouseleave', function() {
    $('#download').stop(true, true).fadeOut('fast');
});

setTimeout выполнит код внутри функции через указанные милисекунды (в данном случае 1000).

3
ответ дан 30 November 2019 в 00:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: