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

回答編集履歴

3

jQuery3\.1\.1対応。

2017/02/26 03:36

投稿

naomi3
naomi3

スコア1105

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-2.1.4.js"></script>
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
- inititialize();
135
+ initialize();
132
136
 
133
137
  // 画像の読み込みが完了後に動作
134
138
  // Safariでは、ここで正しく画像の縦横比を取得できる
135
- $(window).on('load', inititialize);
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 inititialize() {
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').size();
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

軽微なバグ修正

2017/02/26 03:36

投稿

naomi3
naomi3

スコア1105

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

背景画像を画面いっぱいに、メニューのバグ修正

2017/02/21 15:14

投稿

naomi3
naomi3

スコア1105

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 : -8px; /* 上に余白を作らない */
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 : 180px;
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 : -4px;
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
- #menuItem1, #menuItem3 /* ボーダーが2重になるので、#menuItem2は設定しない */ {
59
+ .menuItem {
57
- border-left : solid 1px;
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 backgroundImgSize = null; // 未設定
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 imgSizes = []; // 未設定
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 = imgSizes[index] * widthOfImg;
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
- (widthOfWindow - backgroundImgSize.width) / 2,
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 (backgroundImgSize == null) {
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
- backgroundImgSize = { 'width': width, 'height': height };
258
+ backgroundImgRatio = height / width;
246
259
  }
247
260
 
248
- // 画像のもとのサイズを取得
261
+ // 画像のサイズを取得
249
- if (imgSizes.length < imgs.length) {
262
+ if (imgRatios.length < imgs.length) {
250
263
  // まだ取得できていない時のみ取得
251
- $.each(imgs, function(index, curImg) {
264
+ $.each(imgs, function(index, current) {
252
- var width = curImg.width();
265
+ var width = current.width();
253
- var height = curImg.height();
266
+ var height = current.height();
254
267
  if (! width || ! height) {
255
268
  calced = false;
256
269
  return;
257
270
  }
258
- imgSizes[index] = height / width;
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, curText) {
281
+ $.each(texts, function(index, current) {
282
+ textSizes[index] = {
283
+ 'width' : current.width(),
269
- textSizes[index] = { 'width': curText.width(), 'height': curText.height() };
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 = imgSizes[0] * widthOfLargerImg;
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 * (imgs.length + 1) + marginOfMenu)
301
+ widthOfWindow - borderOfMenu * (menuItems + 1) + marginOfMenu)
283
- widthOfMenuItem = widthOfMenu / imgs.length - 4;
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
- <img src="img/Background-Image.jpg" id="backgroundImg">
358
+ <img src="img/Background-Image.jpg" id="backgroundImg">
339
359
 
340
- <div id="container">
341
- <div id="imgWrapper1" class="imgWrapper">
360
+ <div class="imgWrapper" id="imgWrapper1">
342
- <img src="img/second/02.jpg" id="img1" class="img">
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 id="curtain1" class="curtain"></div>
364
+ <div class="curtain" id="curtain1"></div>
346
365
 
347
- <div id="imgWrapper2" class="imgWrapper">
366
+ <div class="imgWrapper" id="imgWrapper2">
348
- <img src="img/second/03.jpg" id="img2" class="img">
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 id="curtain2" class="curtain"></div>
370
+ <div class="curtain" id="curtain2"></div>
352
371
 
353
- <div id="imgWrapper3" class="imgWrapper">
372
+ <div class="imgWrapper" id="imgWrapper3">
354
- <img src="img/second/04.jpg" id="img3" class="img">
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 id="curtain3" class="curtain"></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>