Заголовок исчезает затем после добавления класса

#jquery #css #header #fade

#jquery #css #заголовок #исчезает

Вопрос:

У меня есть небольшой скрипт, который позволяет моему заголовку добавлять и удалять подкласс при прокрутке страницы.

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

Я не могу понять, как заставить его исчезнуть. Он либо появляется, либо исчезает, либо мигает, а затем исчезает. Мне было интересно, может ли кто-нибудь мне помочь.

Код jquery, который у меня есть, приведен ниже (в нерабочем состоянии)

 function init() {
window.addEventListener('scroll', function(e){
    var distanceY = window.pageYOffset || document.documentElement.scrollTop,
        shrinkOn = 100,
        header = document.querySelector("#header");
    if (distanceY > shrinkOn) {
        $("header").addClass("smaller").fadeIn(400);
    } else {
        if ($("header").hasClass("smaller")) {
            $("header").fadeOut(400).removeClass("smaller").fadeIn(400);
     }
    }
});
}
window.onload = init();
  

Я хочу, чтобы заголовок исчез, добавьте класс .smaller, затем снова исчезните.

И наоборот.

Я надеюсь, что мой вопрос имеет смысл.

Ответ №1:

Если вы добавите или удалите по завершении функции fade, чтобы:

  $("header").addClass("smaller").fadeIn(400);
  

становится:

  $("header").fadeIn(400, function(){
   $(this).addClass("smaller");
 });
  

в качестве альтернативы вы можете использовать анимационные преобразования в css для добавленных классов

Ответ №2:

Я смог разобраться в этом, но это породило новый вопрос, который будет опубликован позже. Вот мое решение ниже:

 $(document).ready(function() {
    /*
        navOffset - The distance in which to trigger the events
        scrollPos - The position Y that the page has been scrolled
    */

  var navOffset = 5 /*$("header").offset().top;*/

    $(window).scroll(function(){
    var scrollPos = $(window).scrollTop();
    $("header").stop(true);

        if (!$("header").hasClass("smaller") || scrollPos < navOffset) {
            if (scrollPos > navOffset) {
                $("header").fadeTo(400, 0, function() {
                    $("header").addClass("smaller");
                });
                $("header").fadeTo(400, 1); 
            } else {
                $("header").fadeTo(400, 0, function (){
                    $("header").removeClass("smaller");
                });
                $("header").fadeTo(400, 1);
            }
        }
    });
});