2015-10-26 16 views
4

Это то, что я пытаюсь сделать:Show/Hide сноска при прокрутке вверх или вниз

  1. Показать div когда .scrollTop() > 20
  2. fadeOut после задержки
  3. Stop fadeOut когда :hover липкий сноска

Это мой jquery:

$(function() { 
    var targets = $(".footer-nav"); 
    if ($(window).scrollTop() > 20) { 
     $(this).addClass('show'); 
    } 
    $(window).scroll(function() { 
     var pos = $(window).scrollTop(); 
     if (pos > 10) { 
      targets.stop(true, true).fadeIn("fast").delay(2000).fadeOut(2000); 
     } else { 
      targets.stop(true, true).fadeOut(); 
     } 
    }); 
}); 

У меня возникли проблемы с точкой .3. Кроме того, когда я очень быстро передвигаю колесо прокрутки, мерцает липкий нижний колонтитул. Есть ли способ до оптимизировать/улучшить. Jsfiddle здесь. Благодарю.

+0

Я задавался вопросом, если вы уже пробовали принятый ответ - это Безразлично Фактически это предотвращает «fadeOut» при наведении нижнего колонтитула, который был основным вопросом. Кроме того, добавление классов не требуется, так как замирание в любом случае будет устанавливать «display: block» или «display: none». И прикрепление данных кажется очень обходным, чтобы установить простой тайм-аут. Не существует переключателя события прокрутки, поэтому, даже если затухание уже было применено, оно все равно попытается установить его для каждого события прокрутки. Затем, если вы идете туда и обратно вокруг точки переключения, это создаст анимацию. Выглядит аккуратно, но это не очень функционально. – Shikkediel

+0

Липкий нижний колонтитул должен иметь в себе ссылки. Таким образом, при прокрутке вверх или вниз липкий нижний колонтитул fadeIn в случае, если вы хотите нажать любую ссылку и через пару секунд fadeOut. С вашим решением нижний колонтитул отображается только один раз, и когда вы снова прокручиваете его, он не появится. Я пробовал полноэкранный просмотр в jsfiddle с выбранным ответом и не работает правильно, но это делается в http://codepen.io/labanino/full/mexgmL/. Большое спасибо. – Labanino

+0

Правда, мой код (который я и не удосужился уйти отсюда), похоже, имел недостаток, но принятый ответ действительно был частью дерьма. Я не мстителен, просто называя это, как будто вижу. Подозрительно поддержал также. – Shikkediel

ответ

3

Я предполагаю, что это именно то, что вы ищете:

Working : Demo

JQuery

$(window).scroll(function(event) { 
    function footer() 
    { 
     var scroll = $(window).scrollTop(); 
     if(scroll>20) 
     { 
      $(".footer-nav").fadeIn("slow").addClass("show"); 
     } 
     else 
     { 
      $(".footer-nav").fadeOut("slow").removeClass("show"); 
     } 

     clearTimeout($.data(this, 'scrollTimer')); 
     $.data(this, 'scrollTimer', setTimeout(function() { 
      if ($('.footer-nav').is(':hover')) { 
       footer(); 
      } 
      else 
      { 
       $(".footer-nav").fadeOut("slow"); 
      } 
     }, 2000)); 
    } 
    footer(); 
}); 
+0

Это выглядело интересно, но оказалось, что оно было ошибочным во многих отношениях. Жаль это говорить. – Shikkediel

+0

Каким образом это было испорчено? – divy3993

+0

Вы можете проверить комментарии, оставленные ниже вопроса. И действительно ... влево? Очень детски. – Shikkediel

1

Зарегистрируйте функцию mouseover, чтобы остановить затухающую анимацию и быстро погасить ее. Кроме того, внутри этого обработчика зарегистрируйте обработчик mouseout, который будет исчезать, а затем отменит сам себя.

$('.footer-nav').on('mouseover', function() { 
    $(this).stop().fadeTo(100, 1); 
    $(this).on('mouseout', function() { 
     $(this).stop().fadeOut(2000); 
     $(this).off('mouseout'); 
    }); 
}); 

Предыдущий ответ не регистрирует событие MouseOut так, что сноска исчезает, когда курсор уходит.

Смежные вопросы