回答編集履歴
3
jQuery3\.1\.1対応。
answer
CHANGED
@@ -6,6 +6,10 @@
|
|
6
6
|
|
7
7
|
バグを修正しました。
|
8
8
|
これでどうですか?
|
9
|
+
|
10
|
+
修正
|
11
|
+
|
12
|
+
jQueryのバージョンによるものでした。3.1.1に対応しました。
|
9
13
|
```HTML
|
10
14
|
<!DOCTYPE html>
|
11
15
|
<html>
|
@@ -68,7 +72,7 @@
|
|
68
72
|
border-right: solid 1px;
|
69
73
|
}
|
70
74
|
</style>
|
71
|
-
<script src="jquery-
|
75
|
+
<script src="jquery-3.1.1.min.js"></script>
|
72
76
|
<script>
|
73
77
|
$(function() {
|
74
78
|
// 背景画像のフェードアウト開始までの時間
|
@@ -128,11 +132,11 @@
|
|
128
132
|
|
129
133
|
|
130
134
|
// IEでは、ここでアニメーションが正しく動作する
|
131
|
-
|
135
|
+
initialize();
|
132
136
|
|
133
137
|
// 画像の読み込みが完了後に動作
|
134
138
|
// Safariでは、ここで正しく画像の縦横比を取得できる
|
135
|
-
$(window).on('load',
|
139
|
+
$(window).on('load', initialize);
|
136
140
|
|
137
141
|
/**
|
138
142
|
* オブジェクト(画像、カーテン、テキスト、メニュー)の位置・サイズを設定する
|
@@ -187,7 +191,7 @@
|
|
187
191
|
resizeTo($('.menuItem'), widthOfMenuItem)
|
188
192
|
}
|
189
193
|
|
190
|
-
function
|
194
|
+
function initialize() {
|
191
195
|
if (initialized || ! calcSizes()) {
|
192
196
|
return;
|
193
197
|
}
|
@@ -301,7 +305,7 @@
|
|
301
305
|
|
302
306
|
var marginOfMenu = (menu.css('margin-left').replace(/px$/, '') - 0) +
|
303
307
|
(menu.css('margin-right').replace(/px$/, '') - 0);
|
304
|
-
var menuItems = $('.menuItem').
|
308
|
+
var menuItems = $('.menuItem').length;
|
305
309
|
widthOfMenu = Math.min(maxWidthOfMenu,
|
306
310
|
widthOfWindow - borderOfMenu * (menuItems + 1) + marginOfMenu)
|
307
311
|
widthOfMenuItem = widthOfMenu / menuItems - 4;
|
2
軽微なバグ修正
answer
CHANGED
@@ -1,6 +1,11 @@
|
|
1
1
|
修正
|
2
2
|
|
3
3
|
背景画像を画面いっぱい(縦横比はそのまま)に、メニューのバグを直しました。
|
4
|
+
|
5
|
+
修正
|
6
|
+
|
7
|
+
バグを修正しました。
|
8
|
+
これでどうですか?
|
4
9
|
```HTML
|
5
10
|
<!DOCTYPE html>
|
6
11
|
<html>
|
@@ -61,7 +66,7 @@
|
|
61
66
|
}
|
62
67
|
#menu :last-child {
|
63
68
|
border-right: solid 1px;
|
64
|
-
}
|
69
|
+
}
|
65
70
|
</style>
|
66
71
|
<script src="jquery-2.1.4.js"></script>
|
67
72
|
<script>
|
1
背景画像を画面いっぱいに、メニューのバグ修正
answer
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
修正
|
2
|
+
|
3
|
+
背景画像を画面いっぱい(縦横比はそのまま)に、メニューのバグを直しました。
|
1
4
|
```HTML
|
2
5
|
<!DOCTYPE html>
|
3
6
|
<html>
|
@@ -11,13 +14,13 @@
|
|
11
14
|
}
|
12
15
|
#container {
|
13
16
|
position: relative;
|
14
|
-
margin-top
|
17
|
+
margin-top: -8px; /* 上に余白を作らない */
|
15
18
|
margin-left: -8px; /* 左に余白を作らない */
|
16
19
|
}
|
17
20
|
#backgroundImg {
|
18
21
|
position: absolute;
|
19
22
|
}
|
20
|
-
.imgWrapper /* 1枚の画像
|
23
|
+
.imgWrapper /* 1枚の画像とテキストをのせたコンテナ */ {
|
21
24
|
position: absolute;
|
22
25
|
z-index: 0;
|
23
26
|
}
|
@@ -33,7 +36,7 @@
|
|
33
36
|
}
|
34
37
|
.textOverImg /* 画像にのせるテキスト */ {
|
35
38
|
position: absolute;
|
36
|
-
width
|
39
|
+
width: 180px;
|
37
40
|
height: 30px;
|
38
41
|
color: white;
|
39
42
|
font-size: x-large;
|
@@ -44,7 +47,7 @@
|
|
44
47
|
#menu {
|
45
48
|
position: relative;
|
46
49
|
overflow: hidden;
|
47
|
-
margin-left
|
50
|
+
margin-left: -4px;
|
48
51
|
margin-right: -4px;
|
49
52
|
display: none; /* 初期状態は非表示 */
|
50
53
|
}
|
@@ -53,10 +56,12 @@
|
|
53
56
|
float: left;
|
54
57
|
text-align: center;
|
55
58
|
}
|
56
|
-
|
59
|
+
.menuItem {
|
57
|
-
border-left
|
60
|
+
border-left: solid 1px;
|
61
|
+
}
|
62
|
+
#menu :last-child {
|
58
63
|
border-right: solid 1px;
|
59
|
-
}
|
64
|
+
} */
|
60
65
|
</style>
|
61
66
|
<script src="jquery-2.1.4.js"></script>
|
62
67
|
<script>
|
@@ -69,30 +74,37 @@
|
|
69
74
|
var delayBetweenSlides = 1500; // ミリ秒
|
70
75
|
// スライドイン中の時間
|
71
76
|
var durationOfSlide = 800; // ミリ秒
|
77
|
+
|
72
78
|
// 背景画像
|
73
79
|
var backgroundImg = $('#backgroundImg');
|
74
|
-
// 背景画像の
|
80
|
+
// 背景画像の縦横比
|
75
|
-
var
|
81
|
+
var backgroundImgRatio = null; // 未設定
|
82
|
+
|
76
83
|
// 画面幅がこの値より狭くなると2段モード
|
77
84
|
var discontinuousWidth = 1000; // px
|
78
85
|
// 画面幅
|
79
86
|
var widthOfWindow;
|
80
87
|
// 2段モードか否か
|
81
88
|
var modeIn2Rows;
|
89
|
+
|
82
90
|
// スライドインする画像(左から)
|
83
91
|
var imgs = [ $('#img1'), $('#img2'), $('#img3') ];
|
84
|
-
// 画像の
|
92
|
+
// 画像の縦横比(左から)
|
85
|
-
var
|
93
|
+
var imgRatios = []; // 未設定
|
94
|
+
|
86
95
|
// 画像の実際の幅
|
87
96
|
var widthOfImg;
|
88
97
|
// 大きい方の画像の実際の幅、高さ
|
89
98
|
var widthOfLargerImg, heightOfLargerImg;
|
99
|
+
|
90
100
|
// 画像にのせるテキストのコンテナ(左から)
|
91
101
|
var texts = [ $('#text1'), $('#text2'), $('#text3') ];
|
92
102
|
// 画像にのせるテキストのサイズ(幅、高さ)(左から)
|
93
103
|
var textSizes = []; // 未設定
|
104
|
+
|
94
105
|
// 画像を隠すカーテン(左から)
|
95
106
|
var curtains = [ $('#curtain1'), $('#curtain2'), $('#curtain3') ];
|
107
|
+
|
96
108
|
// メニュー
|
97
109
|
var menu = $('#menu');
|
98
110
|
// 画像とメニューの隙間
|
@@ -105,6 +117,7 @@
|
|
105
117
|
var widthOfMenu;
|
106
118
|
// 1メニュー項目の幅
|
107
119
|
var widthOfMenuItem;
|
120
|
+
|
108
121
|
// 初期処理が正しくできたか否か
|
109
122
|
var initialized = false;
|
110
123
|
|
@@ -113,7 +126,7 @@
|
|
113
126
|
inititialize();
|
114
127
|
|
115
128
|
// 画像の読み込みが完了後に動作
|
116
|
-
// Safariでは、ここで正しく画像の
|
129
|
+
// Safariでは、ここで正しく画像の縦横比を取得できる
|
117
130
|
$(window).on('load', inititialize);
|
118
131
|
|
119
132
|
/**
|
@@ -130,7 +143,7 @@
|
|
130
143
|
// 1段モード または 2段モード2番目以降の画像(下段)
|
131
144
|
// 1段モードの時、縦位置は 0 に戻す
|
132
145
|
var posY = (modeIn2Rows ? heightOfLargerImg : 0);
|
133
|
-
var heightOfImg =
|
146
|
+
var heightOfImg = imgRatios[index] * widthOfImg;
|
134
147
|
maxHeightOfImg = Math.max(maxHeightOfImg, heightOfImg);
|
135
148
|
|
136
149
|
// 画像、テキストをのせたコンテナを移動
|
@@ -158,7 +171,8 @@
|
|
158
171
|
moveTo(texts[index],
|
159
172
|
(widthOfLargerImg - textSizes[index].width) / 2,
|
160
173
|
(heightOfLargerImg - textSizes[index].height) / 2);
|
161
|
-
// posX += 0;
|
174
|
+
// posX += 0;
|
175
|
+
// カーテンなし
|
162
176
|
}
|
163
177
|
}
|
164
178
|
|
@@ -174,9 +188,7 @@
|
|
174
188
|
}
|
175
189
|
// 初期処理が正しくできておらず、サイズを計算できた時に続行
|
176
190
|
|
177
|
-
moveTo(backgroundImg,
|
178
|
-
|
191
|
+
resizeTo(backgroundImg, widthOfWindow, backgroundImgRatio * widthOfWindow);
|
179
|
-
($(window).height() - backgroundImgSize.height) / 2);
|
180
192
|
|
181
193
|
setTimeout(function() {
|
182
194
|
backgroundImg.fadeOut(durationOfFadingOutBackground, afterFadingOutBackground);
|
@@ -188,7 +200,7 @@
|
|
188
200
|
|
189
201
|
// 背景画像フェードアウト終了後に動作
|
190
202
|
function afterFadingOutBackground() {
|
191
|
-
// 最左の画像の位置は、画面より画像幅1つ分左
|
203
|
+
// 最左の画像の横位置は、画面より画像幅1つ分左
|
192
204
|
placeObjects(- widthOfImg, - widthOfLargerImg, true);
|
193
205
|
|
194
206
|
// 初期状態で非表示だったオブジェクトを表示
|
@@ -197,7 +209,7 @@
|
|
197
209
|
menu.show();
|
198
210
|
|
199
211
|
// 画像およびカーテンのアニメーション設定
|
200
|
-
// 最左の画像の位置は画面と同じ
|
212
|
+
// 最左の画像の横位置は画面と同じ
|
201
213
|
var posX = 0;
|
202
214
|
for (var index = 0; index < imgs.length; index++) {
|
203
215
|
if (! modeIn2Rows) {
|
@@ -209,7 +221,8 @@
|
|
209
221
|
else if (! index) {
|
210
222
|
// 2段モード、最初の画像(上段)
|
211
223
|
slideImgIn(imgs[index].parent(), posX);
|
212
|
-
// posX += 0;
|
224
|
+
// posX += 0;
|
225
|
+
// カーテンなし
|
213
226
|
}
|
214
227
|
else {
|
215
228
|
// 2段モード、2番目以降の画像(下段)
|
@@ -228,13 +241,13 @@
|
|
228
241
|
delayBetweenSlides);
|
229
242
|
}
|
230
243
|
|
231
|
-
/** 画面幅に応じて
|
244
|
+
/** 画面幅に応じて縦横比を(再)計算する
|
232
245
|
* @return 正しく計算 true:できた/false:できなかった
|
233
246
|
*/
|
234
247
|
function calcSizes() {
|
235
248
|
var calced = true;
|
236
249
|
|
237
|
-
if (
|
250
|
+
if (backgroundImgRatio === null) {
|
238
251
|
// まだ取得できていない時のみ取得
|
239
252
|
var width = backgroundImg.width();
|
240
253
|
var height = backgroundImg.height();
|
@@ -242,20 +255,20 @@
|
|
242
255
|
// Safariで画像がまだロードされていない時
|
243
256
|
return false;
|
244
257
|
}
|
245
|
-
|
258
|
+
backgroundImgRatio = height / width;
|
246
259
|
}
|
247
260
|
|
248
|
-
// 画像の
|
261
|
+
// 画像のサイズを取得
|
249
|
-
if (
|
262
|
+
if (imgRatios.length < imgs.length) {
|
250
263
|
// まだ取得できていない時のみ取得
|
251
|
-
$.each(imgs, function(index,
|
264
|
+
$.each(imgs, function(index, current) {
|
252
|
-
var width =
|
265
|
+
var width = current.width();
|
253
|
-
var height =
|
266
|
+
var height = current.height();
|
254
267
|
if (! width || ! height) {
|
255
268
|
calced = false;
|
256
269
|
return;
|
257
270
|
}
|
258
|
-
|
271
|
+
imgRatios[index] = height / width;
|
259
272
|
});
|
260
273
|
if (! calced) {
|
261
274
|
return false;
|
@@ -265,22 +278,28 @@
|
|
265
278
|
// テキストのサイズを取得
|
266
279
|
if (textSizes.length < texts.length) {
|
267
280
|
// まだ取得できていない時のみ取得
|
268
|
-
$.each(texts, function(index,
|
281
|
+
$.each(texts, function(index, current) {
|
282
|
+
textSizes[index] = {
|
283
|
+
'width' : current.width(),
|
269
|
-
|
284
|
+
'height': current.height()
|
285
|
+
};
|
270
286
|
});
|
271
287
|
}
|
272
288
|
|
273
289
|
widthOfWindow = $(window).width();
|
274
290
|
modeIn2Rows = (widthOfWindow < discontinuousWidth);
|
291
|
+
|
275
292
|
widthOfImg = widthOfWindow / (modeIn2Rows ? imgs.length - 1 : imgs.length);
|
293
|
+
|
276
294
|
widthOfLargerImg = widthOfWindow;
|
277
|
-
heightOfLargerImg =
|
295
|
+
heightOfLargerImg = imgRatios[0] * widthOfLargerImg;
|
278
296
|
|
279
297
|
var marginOfMenu = (menu.css('margin-left').replace(/px$/, '') - 0) +
|
280
298
|
(menu.css('margin-right').replace(/px$/, '') - 0);
|
299
|
+
var menuItems = $('.menuItem').size();
|
281
300
|
widthOfMenu = Math.min(maxWidthOfMenu,
|
282
|
-
widthOfWindow - borderOfMenu * (
|
301
|
+
widthOfWindow - borderOfMenu * (menuItems + 1) + marginOfMenu)
|
283
|
-
widthOfMenuItem = widthOfMenu /
|
302
|
+
widthOfMenuItem = widthOfMenu / menuItems - 4;
|
284
303
|
|
285
304
|
return true;
|
286
305
|
}
|
@@ -328,38 +347,39 @@
|
|
328
347
|
$(window).on('resize', function() {
|
329
348
|
calcSizes();
|
330
349
|
// 画面幅に合わせて、画像の位置・サイズを再設定する
|
331
|
-
// 最左の画像の位置は、画面と同じ。カーテンはない
|
350
|
+
// 最左の画像の横位置は、画面と同じ。カーテンはない
|
332
351
|
placeObjects(0, 0, false);
|
333
352
|
});
|
334
353
|
});
|
335
354
|
</script>
|
336
355
|
</head>
|
337
356
|
<body>
|
357
|
+
<div id="container">
|
338
|
-
|
358
|
+
<img src="img/Background-Image.jpg" id="backgroundImg">
|
339
359
|
|
340
|
-
<div id="container">
|
341
|
-
<div
|
360
|
+
<div class="imgWrapper" id="imgWrapper1">
|
342
|
-
<img src="img/second/02.jpg"
|
361
|
+
<img src="img/second/02.jpg" class="img" id="img1">
|
343
362
|
<div class="textOverImg" id="text1">1枚目</div>
|
344
363
|
</div>
|
345
|
-
<div
|
364
|
+
<div class="curtain" id="curtain1"></div>
|
346
365
|
|
347
|
-
<div
|
366
|
+
<div class="imgWrapper" id="imgWrapper2">
|
348
|
-
<img src="img/second/03.jpg"
|
367
|
+
<img src="img/second/03.jpg" class="img" id="img2">
|
349
368
|
<div class="textOverImg" id="text2">2枚目 = my tune</div>
|
350
369
|
</div>
|
351
|
-
<div
|
370
|
+
<div class="curtain" id="curtain2"></div>
|
352
371
|
|
353
|
-
<div
|
372
|
+
<div class="imgWrapper" id="imgWrapper3">
|
354
|
-
<img src="img/second/04.jpg"
|
373
|
+
<img src="img/second/04.jpg" class="img" id="img3">
|
355
374
|
<div class="textOverImg" id="text3">3枚目 - 777<br>2行目</div>
|
356
375
|
</div>
|
357
|
-
<div
|
376
|
+
<div class="curtain" id="curtain3"></div>
|
358
377
|
</div>
|
359
378
|
<div id="menu">
|
360
379
|
<div class="menuItem" id="menuItem1">メニュー1</div>
|
361
380
|
<div class="menuItem" id="menuItem2">メニュー2</div>
|
362
381
|
<div class="menuItem" id="menuItem3">メニュー3</div>
|
382
|
+
<div class="menuItem" id="menuItem4">メニュー4</div>
|
363
383
|
</div>
|
364
384
|
</body>
|
365
385
|
</html>
|