質問編集履歴

1

Javascript修正

2016/10/17 03:07

投稿

a2s
a2s

スコア40

title CHANGED
File without changes
body CHANGED
@@ -42,54 +42,6 @@
42
42
  </div>
43
43
  </div>
44
44
  ```
45
- ```Javascript
46
- $(function() {
47
- // ナビゲーションのリンクを指定
48
- var navLink = $('#gnav li a');
49
- // 各コンテンツのページ上部からの開始位置と終了位置を配列に格納しておく
50
- var contentsArr = new Array();
51
- for (var i = 0; i < navLink.length; i++) {
52
- // コンテンツのIDを取得
53
- var targetContents = navLink.eq(i).attr('href');
54
- // ページ内リンクでないナビゲーションが含まれている場合は除外する
55
- if(targetContents.charAt(0) == '#') {
56
- // ページ上部からコンテンツの開始位置までの距離を取得
57
- var targetContentsTop = $(targetContents).offset().top;
58
- // ページ上部からコンテンツの終了位置までの距離を取得
59
- var targetContentsBottom = targetContentsTop + $(targetContents).outerHeight(true) - 1;
60
- // 配列に格納
61
- contentsArr[i] = [targetContentsTop, targetContentsBottom]
62
- }
63
- };
64
- // 現在地をチェックする
65
- function currentCheck() {
66
- // 現在のスクロール位置を取得
67
- var windowScrolltop = $(window).scrollTop();
68
- for (var i = 0; i < contentsArr.length; i++) {
69
- // 現在のスクロール位置が、配列に格納した開始位置と終了位置の間にあるものを調べる
70
- if(contentsArr[i][0] <= windowScrolltop && contentsArr[i][1] >= windowScrolltop) {
71
- // 開始位置と終了位置の間にある場合、ナビゲーションにclass="current"をつける
72
- navLink.removeClass('current');
73
- navLink.eq(i).addClass('current');
74
- i == contentsArr.length;
75
- }
76
- };
77
- }
78
-
79
- // ページ読み込み時とスクロール時に、現在地をチェックする
80
- $(window).on('load scroll', function() {
81
- currentCheck();
82
- });
83
-
84
- // ナビゲーションをクリックした時のスムーズスクロール
85
- navLink.click(function() {
86
- $('html,body').animate({
87
- scrollTop: $($(this).attr('href')).offset().top
88
- }, 300);
89
- return false;
90
- })
91
- });
92
- ```
93
45
  ```CSS
94
46
  * {
95
47
  margin: 0;
@@ -148,4 +100,53 @@
148
100
  #contents .inner div:nth-child(odd) {
149
101
  background: #999999;
150
102
  }
103
+ ```
104
+ ```修正後Javascript
105
+ // ナビゲーションのリンクを指定
106
+ var navLink = $('#gnav li a');
107
+ // 各コンテンツのページ上部からの開始位置と終了位置を配列に格納しておく
108
+ var contentsArr = new Array();
109
+ for (var i = 0; i < navLink.length; i++) {
110
+ // コンテンツのIDを取得
111
+ var targetContents = navLink.eq(i).attr('href');
112
+ // ページ内リンクでないナビゲーションが含まれている場合は除外する
113
+ if(targetContents.charAt(0) == '#') {
114
+ // ページ上部からコンテンツの開始位置までの距離を取得
115
+ var targetContentsTop = $(targetContents).offset().top;
116
+ // ページ上部からコンテンツの終了位置までの距離を取得
117
+ var targetContentsBottom = targetContentsTop + $(targetContents).outerHeight(true) - 1;
118
+ // 配列に格納
119
+ contentsArr[i] = [targetContentsTop, targetContentsBottom]
120
+ }
121
+ };
122
+ // 現在地をチェックする
123
+ function currentCheck() {
124
+ // 現在のスクロール位置を取得
125
+ var windowScrolltop = $(window).scrollTop();
126
+ for (var i = 0; i < contentsArr.length; i++) {
127
+ // 現在のスクロール位置が、配列に格納した開始位置と終了位置の間にあるものを調べる
128
+ if(contentsArr[i][0] <= windowScrolltop && contentsArr[i][1] >= windowScrolltop) {
129
+ // 開始位置と終了位置の間にある場合、ナビゲーションにclass="current"をつける
130
+ navLink.removeClass('current');
131
+ navLink.eq(i).addClass('current');
132
+ i == contentsArr.length;
133
+ }
134
+ };
135
+ }
136
+
137
+ // ページ読み込み時とスクロール時に、現在地をチェックする
138
+ $(window).on('load scroll', function() {
139
+ currentCheck();
140
+ });
141
+
142
+ // ナビゲーションをクリックした時のスムーズスクロール
143
+ navLink.click(function(e) {
144
+ e.preventDefault();
145
+
146
+ if( $(e.currentTarget).attr('class') === 'current' ) return false;
147
+ $('html,body').animate({
148
+ scrollTop: $($(this).attr('href')).offset().top
149
+ }, 300);
150
+ return false;
151
+ })
151
152
  ```