回答編集履歴

1

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

2015/10/30 16:28

投稿

abbey
abbey

スコア13

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