質問: "index.html#company" } }); }); } ```
回答: ヘッダ出現の判定がよくないようです。 質問のコードでは、`scroll`イベントが呼び出されるたびに`slideUp`などの処理がされています。 `scroll`イベントはちょっとスクロールされる間に何十回と呼び出されるものですので、何十回と`slideUp`を実行しようとして、結果的におかしくなるのです。 `slideUp`,`slideDown`を呼び出すのは、`scrollTop`の値が、**ある閾値(しきいち)を超えた瞬間だけ**にすれば、おかしな挙動をしなくなります。 具体的にいうと、こんな感じのコードです。 ``` var s_old = $(window).scrollTop();// ここに「前回のスクロール位置」を常に保存します $(window).on("load scroll", function () { var t = 35; var s = $(this).scrollTop();// 今回のスクロール位置 if ((s_old < t)&&(t <= s)){ $(".cb-header").slideDown(); } else if ((s < t)&&(t <= s_old)){ $(".cb-header").slideUp(); } s_old = s; }); ``` 追記 iPhoneでは`scrollTop`が前後することがあるのがわかりましたので、スライド中は**スライドなう**でフラグ管理して、過敏な反応をしないようにしておけば、うまく行くかと思います。 ``` var slide_now = false; var s_old = $(window).scrollTop();// ここに「前回のスクロール位置」を常に保存します $(window).on("load scroll", function () { if (slide_now) return true; var t = 35; var s = $(this).scrollTop();// 今回のスクロール位置 if ((s_old < t)&&(t <= s)){ slide_now = true; $(".cb-header").slideDown("slow",function(){ slide_now = false; }); } else if ((s < t)&&(t <= s_old)){ slide_now = true; $(".cb-header").slideUp("slow",function(){ slide_now = false; }); } s_old = s; }); ```