teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

JavaScriptのソースを付けました。

2015/10/30 16:28

投稿

abbey
abbey

スコア13

answer CHANGED
@@ -1,2 +1,36 @@
1
1
  600px以上スクロールして<div>が表示されると、showFlagがセットされます。リンクをクリックするとスクロールしますが、"#hoge-anchor"が600px以上のところにあると、showFlagがtrueですから、<div>は消えません。"#hoge-anchor"が600px未満のところにあると消えます。$(this).scrollTop() > 600がfalseになりますから、elseが実行されますからね。
2
- もし"#hoge-anchor"を600px以上のところに置くなら、600px以上への移動がリンクのクリックによるものかどうかのフラグを導入するのが簡単です。別に回答します。
2
+ もし"#hoge-anchor"を600px以上のところに置くなら、600px以上への移動がリンクのクリックによるものかどうかのフラグを導入するのが簡単です。
3
+ リンク(ここではクラス"hogehoge"を付けました)にclick()を導入し、その中で<div>を隠し、さらにフラグをセットします。windowのscroll()の中では、フラグがセットされていない場合にのみ600px以上スクロールの処理をします。さらにフラグをクリアします。
4
+
5
+ ```JavaScript
6
+ $(function() {
7
+ var scrollByClick = false; // このフラグを導入しました。
8
+ var header = $('.hoge');
9
+ header.css('top', '-150px');
10
+ var showFlag = false;
11
+
12
+ //-----[header-min]
13
+ $(this).scroll(function () {
14
+ if ($(this).scrollTop() > 600) {
15
+ if (!scrollByClick && showFlag == false) {
16
+ showFlag = true;
17
+ header.stop().animate({'top' : '0'});
18
+ }
19
+ } else {
20
+ if (showFlag) {
21
+ showFlag = false;
22
+ header.stop().animate({'top' : '-150px'});
23
+ }
24
+ }
25
+ scrollByClick = false;
26
+ });
27
+ // <div class="hoge"><a href="#hoge-anchor" class="hogehoge">「hoge-anchor」へ</a></div>とします。
28
+ // ちなみに</a>が間違って</div>になっています。
29
+ $('.hogehoge').click(function() {
30
+ showFlag = false;
31
+ header.stop().animate({'top' : '-150px'});
32
+ scrollByClick = true;
33
+ });
34
+ });
35
+
36
+ ```