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

回答編集履歴

3

質問2つ目に対する回答

2017/07/10 04:24

投稿

m.ts10806
m.ts10806

スコア80888

answer CHANGED
@@ -32,4 +32,31 @@
32
32
  質問2:
33
33
  > 普通にマウスホイールでスクロールした場合それに合わせメニューのアンダーバーの位置をスライドさせて今どこにいるかわかりやすくすること可能でしょうか?
34
34
 
35
+ イメージは例えば[CSSフレームワークのPushpin](http://materializecss.com/pushpin.html)のようなものと推察されます。
36
+ Qiitaの記事とサブタイトルを連動してるやつも同じですね。
37
+ 現在のスクロール位置と対象の記事のトップ位置をスクロール毎のイベントで取得し、比較してた上で
38
+ アンダーバーを移動させることで可能となると思います。
39
+
35
- 検証中です。少々お待ちください。
40
+ ```javascript
41
+
42
+ $(window).scroll(function(){ //スクロール時のイベント
43
+ var doc_pos = $(document).scrollTop(); //現在のスクロール位置を取得
44
+ var left_position = 0;
45
+ if(doc_pos == 0){ //0の場合はTOPとする
46
+ $(".global-nav--bar").css("left",left_position+"%");
47
+ }else{
48
+ for(i=1;i<5;i++){
49
+ c_pos = $('#content_'+i).offset().top; //各コンテンツの位置を取得
50
+ if(c_pos <= doc_pos){ //各コンテンツの位置を越えていたらアンダーバーを移動
51
+ left_position = i * 20;
52
+ $(".global-nav--bar").css("left",left_position+"%");
53
+ }
54
+ }
55
+ }
56
+ })
57
+
58
+ ```
59
+
60
+ ※ただし上記ソースは、グロナビメニュークリックでちょっとアンダーバーが横に動いて正位置に戻るような動作をします。
61
+ また「コンテンツは4つ(+トップ)」と決め打ちなので増減した場合に対応させる必要があります。
62
+ その部分を含めてご自身のサイトに合うように調整してみてください。

2

修正

2017/07/10 04:24

投稿

m.ts10806
m.ts10806

スコア80888

answer CHANGED
@@ -1,8 +1,8 @@
1
- **注記:
1
+ # 注記:
2
- 動作検証はある程度してはいるものの、あくまでサンプルであり最適解とは限りません。
2
+ **動作検証はある程度してはいるものの、あくまでサンプルであり最適解とは限りません。**
3
- 自身の環境に導入するための参考程度にとどめておいてください。
3
+ **自身の環境に導入するための参考程度にとどめておいてください。**
4
- **
5
4
 
5
+
6
6
  質問1:
7
7
  > 最後にマウスオーバーしたところにアンダーバーをとどめておくような設定は可能でしょうか?
8
8
 

1

注記

2017/07/10 02:56

投稿

m.ts10806
m.ts10806

スコア80888

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