質問編集履歴
1
Javascript修正
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
|
```
|