回答編集履歴

3

質問2つ目に対する回答

2017/07/10 04:24

投稿

m.ts10806
m.ts10806

スコア80850

test CHANGED
@@ -66,4 +66,60 @@
66
66
 
67
67
 
68
68
 
69
+ イメージは例えば[CSSフレームワークのPushpin](http://materializecss.com/pushpin.html)のようなものと推察されます。
70
+
71
+ Qiitaの記事とサブタイトルを連動してるやつも同じですね。
72
+
73
+ 現在のスクロール位置と対象の記事のトップ位置をスクロール毎のイベントで取得し、比較してた上で
74
+
75
+ アンダーバーを移動させることで可能となると思います。
76
+
77
+
78
+
69
- 検証中です。少々お待ちください。
79
+ ```javascript
80
+
81
+
82
+
83
+ $(window).scroll(function(){ //スクロール時のイベント
84
+
85
+ var doc_pos = $(document).scrollTop(); //現在のスクロール位置を取得
86
+
87
+ var left_position = 0;
88
+
89
+ if(doc_pos == 0){ //0の場合はTOPとする
90
+
91
+ $(".global-nav--bar").css("left",left_position+"%");
92
+
93
+ }else{
94
+
95
+ for(i=1;i<5;i++){
96
+
97
+ c_pos = $('#content_'+i).offset().top; //各コンテンツの位置を取得
98
+
99
+ if(c_pos <= doc_pos){ //各コンテンツの位置を越えていたらアンダーバーを移動
100
+
101
+ left_position = i * 20;
102
+
103
+ $(".global-nav--bar").css("left",left_position+"%");
104
+
105
+ }
106
+
107
+ }
108
+
109
+ }
110
+
111
+ })
112
+
113
+
114
+
115
+ ```
116
+
117
+
118
+
119
+ ※ただし上記ソースは、グロナビメニュークリックでちょっとアンダーバーが横に動いて正位置に戻るような動作をします。
120
+
121
+ また「コンテンツは4つ(+トップ)」と決め打ちなので増減した場合に対応させる必要があります。
122
+
123
+ その部分を含めてご自身のサイトに合うように調整してみてください。
124
+
125
+

2

修正

2017/07/10 04:24

投稿

m.ts10806
m.ts10806

スコア80850

test CHANGED
@@ -1,10 +1,10 @@
1
- **注記:
1
+ # 注記:
2
2
 
3
- 動作検証はある程度してはいるものの、あくまでサンプルであり最適解とは限りません。
3
+ **動作検証はある程度してはいるものの、あくまでサンプルであり最適解とは限りません。**
4
4
 
5
- 自身の環境に導入するための参考程度にとどめておいてください。
5
+ **自身の環境に導入するための参考程度にとどめておいてください。**
6
6
 
7
- **
7
+
8
8
 
9
9
 
10
10
 

1

注記

2017/07/10 02:56

投稿

m.ts10806
m.ts10806

スコア80850

test CHANGED
@@ -1,10 +1,20 @@
1
+ **注記:
2
+
3
+ 動作検証はある程度してはいるものの、あくまでサンプルであり最適解とは限りません。
4
+
5
+ 自身の環境に導入するための参考程度にとどめておいてください。
6
+
7
+ **
8
+
9
+
10
+
1
11
  質問1:
2
12
 
3
13
  > 最後にマウスオーバーしたところにアンダーバーをとどめておくような設定は可能でしょうか?
4
14
 
5
15
 
6
16
 
7
- 戻ってしまうのはcssのhoverの特性だと思います。
17
+ hoverからoutしたときに戻ってしまうのはcssのhoverの特性だと思います。
8
18
 
9
19
  hoverしたときのみに反映されるので、hoverしてない場合は初期値となります。
10
20
 
@@ -20,6 +30,8 @@
20
30
 
21
31
  ```javascript
22
32
 
33
+ //グロナビhover時のイベントをキャッチ
34
+
23
35
  $('.global-nav p').on({
24
36
 
25
37
  'mouseenter' : function(){
@@ -28,11 +40,9 @@
28
40
 
29
41
  var left_position = index * 20; //アンダーバーの位置を決定
30
42
 
31
-
32
-
33
43
  $(".global-nav--bar").css("left",left_position+"%"); //アンダーバー移動
34
44
 
35
- },
45
+ },
36
46
 
37
47
  });
38
48