質問: $('body.top').find('.journal'); if (navTopPos < winTop) { headerOfTop.addClass('fixed_top'); journalOfTop.addClass('fixed_top'); } else { headerOfTop.removeClass('fixed_top'); journalOfTop.removeClass('fixed_top'); } } }); ```
回答: スクロールイベントの中で`navTopPos`を更新(取得)しているため、 スクロールの度に`navTopPos`のoffset位置が更新されます。 初回スクロール後、fixed_topクラスが追加され、 `headerOfTop`、`journalOfTop`は期待通り、ページ上部へ固定されるかと存じますが、 スクロールの度に`navTopPos`のoffset位置が更新されるため、 ページ上部固定後の`navTopPos`は再度0となります。 そのため、ページ上部固定後のスクロールイベントでは、 以下のifがelseと判定され、fixed_topクラスが除去されます。 `if (navTopPos < winTop) {` 上記が繰り返し発生し、ちらついているように見えています。 `navTopPos`については、`hasClass`を使用し、 fixed_topクラスが付与されていない場合のみ、更新すればよいかと思います。 ``` if (!headerOfTop.hasClass("fixed_top")) { navTopPos = $('.header .navigation').offset().top; } ```