回答編集履歴

3

jQuery3\.1\.1対応。

2017/02/26 03:36

投稿

naomi3
naomi3

スコア1105

test CHANGED
@@ -14,6 +14,14 @@
14
14
 
15
15
  これでどうですか?
16
16
 
17
+
18
+
19
+ 修正
20
+
21
+
22
+
23
+ jQueryのバージョンによるものでした。3.1.1に対応しました。
24
+
17
25
  ```HTML
18
26
 
19
27
  <!DOCTYPE html>
@@ -138,7 +146,7 @@
138
146
 
139
147
  </style>
140
148
 
141
- <script src="jquery-2.1.4.js"></script>
149
+ <script src="jquery-3.1.1.min.js"></script>
142
150
 
143
151
  <script>
144
152
 
@@ -258,7 +266,7 @@
258
266
 
259
267
  // IEでは、ここでアニメーションが正しく動作する
260
268
 
261
- inititialize();
269
+ initialize();
262
270
 
263
271
 
264
272
 
@@ -266,7 +274,7 @@
266
274
 
267
275
  // Safariでは、ここで正しく画像の縦横比を取得できる
268
276
 
269
- $(window).on('load', inititialize);
277
+ $(window).on('load', initialize);
270
278
 
271
279
 
272
280
 
@@ -376,7 +384,7 @@
376
384
 
377
385
 
378
386
 
379
- function inititialize() {
387
+ function initialize() {
380
388
 
381
389
  if (initialized || ! calcSizes()) {
382
390
 
@@ -604,7 +612,7 @@
604
612
 
605
613
  (menu.css('margin-right').replace(/px$/, '') - 0);
606
614
 
607
- var menuItems = $('.menuItem').size();
615
+ var menuItems = $('.menuItem').length;
608
616
 
609
617
  widthOfMenu = Math.min(maxWidthOfMenu,
610
618
 

2

軽微なバグ修正

2017/02/26 03:36

投稿

naomi3
naomi3

スコア1105

test CHANGED
@@ -4,6 +4,16 @@
4
4
 
5
5
  背景画像を画面いっぱい(縦横比はそのまま)に、メニューのバグを直しました。
6
6
 
7
+
8
+
9
+ 修正
10
+
11
+
12
+
13
+ バグを修正しました。
14
+
15
+ これでどうですか?
16
+
7
17
  ```HTML
8
18
 
9
19
  <!DOCTYPE html>
@@ -124,7 +134,7 @@
124
134
 
125
135
  border-right: solid 1px;
126
136
 
127
- } */
137
+ }
128
138
 
129
139
  </style>
130
140
 

1

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

2017/02/21 15:14

投稿

naomi3
naomi3

スコア1105

test CHANGED
@@ -1,3 +1,9 @@
1
+ 修正
2
+
3
+
4
+
5
+ 背景画像を画面いっぱい(縦横比はそのまま)に、メニューのバグを直しました。
6
+
1
7
  ```HTML
2
8
 
3
9
  <!DOCTYPE html>
@@ -24,7 +30,7 @@
24
30
 
25
31
  position: relative;
26
32
 
27
- margin-top : -8px; /* 上に余白を作らない */
33
+ margin-top: -8px; /* 上に余白を作らない */
28
34
 
29
35
  margin-left: -8px; /* 左に余白を作らない */
30
36
 
@@ -36,7 +42,7 @@
36
42
 
37
43
  }
38
44
 
39
- .imgWrapper /* 1枚の画像テキストをのせたコンテナ */ {
45
+ .imgWrapper /* 1枚の画像テキストをのせたコンテナ */ {
40
46
 
41
47
  position: absolute;
42
48
 
@@ -68,7 +74,7 @@
68
74
 
69
75
  position: absolute;
70
76
 
71
- width : 180px;
77
+ width: 180px;
72
78
 
73
79
  height: 30px;
74
80
 
@@ -90,7 +96,7 @@
90
96
 
91
97
  overflow: hidden;
92
98
 
93
- margin-left : -4px;
99
+ margin-left: -4px;
94
100
 
95
101
  margin-right: -4px;
96
102
 
@@ -108,13 +114,17 @@
108
114
 
109
115
  }
110
116
 
111
- #menuItem1, #menuItem3 /* ボーダーが2重になるので、#menuItem2は設定しない */ {
117
+ .menuItem {
112
-
118
+
113
- border-left : solid 1px;
119
+ border-left: solid 1px;
120
+
121
+ }
122
+
123
+ #menu :last-child {
114
124
 
115
125
  border-right: solid 1px;
116
126
 
117
- }
127
+ } */
118
128
 
119
129
  </style>
120
130
 
@@ -140,13 +150,17 @@
140
150
 
141
151
  var durationOfSlide = 800; // ミリ秒
142
152
 
153
+
154
+
143
155
  // 背景画像
144
156
 
145
157
  var backgroundImg = $('#backgroundImg');
146
158
 
147
- // 背景画像のサイズ(幅、高さ)
159
+ // 背景画像の縦横比
148
-
160
+
149
- var backgroundImgSize = null; // 未設定
161
+ var backgroundImgRatio = null; // 未設定
162
+
163
+
150
164
 
151
165
  // 画面幅がこの値より狭くなると2段モード
152
166
 
@@ -160,13 +174,17 @@
160
174
 
161
175
  var modeIn2Rows;
162
176
 
177
+
178
+
163
179
  // スライドインする画像(左から)
164
180
 
165
181
  var imgs = [ $('#img1'), $('#img2'), $('#img3') ];
166
182
 
167
- // 画像のもとのサイズ(縦横比)(左から)
183
+ // 画像の縦横比(左から)
168
-
184
+
169
- var imgSizes = []; // 未設定
185
+ var imgRatios = []; // 未設定
186
+
187
+
170
188
 
171
189
  // 画像の実際の幅
172
190
 
@@ -176,6 +194,8 @@
176
194
 
177
195
  var widthOfLargerImg, heightOfLargerImg;
178
196
 
197
+
198
+
179
199
  // 画像にのせるテキストのコンテナ(左から)
180
200
 
181
201
  var texts = [ $('#text1'), $('#text2'), $('#text3') ];
@@ -184,10 +204,14 @@
184
204
 
185
205
  var textSizes = []; // 未設定
186
206
 
207
+
208
+
187
209
  // 画像を隠すカーテン(左から)
188
210
 
189
211
  var curtains = [ $('#curtain1'), $('#curtain2'), $('#curtain3') ];
190
212
 
213
+
214
+
191
215
  // メニュー
192
216
 
193
217
  var menu = $('#menu');
@@ -212,6 +236,8 @@
212
236
 
213
237
  var widthOfMenuItem;
214
238
 
239
+
240
+
215
241
  // 初期処理が正しくできたか否か
216
242
 
217
243
  var initialized = false;
@@ -228,7 +254,7 @@
228
254
 
229
255
  // 画像の読み込みが完了後に動作
230
256
 
231
- // Safariでは、ここで正しく画像のサイズを取得できる
257
+ // Safariでは、ここで正しく画像の縦横比を取得できる
232
258
 
233
259
  $(window).on('load', inititialize);
234
260
 
@@ -262,7 +288,7 @@
262
288
 
263
289
  var posY = (modeIn2Rows ? heightOfLargerImg : 0);
264
290
 
265
- var heightOfImg = imgSizes[index] * widthOfImg;
291
+ var heightOfImg = imgRatios[index] * widthOfImg;
266
292
 
267
293
  maxHeightOfImg = Math.max(maxHeightOfImg, heightOfImg);
268
294
 
@@ -318,7 +344,9 @@
318
344
 
319
345
  (heightOfLargerImg - textSizes[index].height) / 2);
320
346
 
321
- // posX += 0; // カーテンなし
347
+ // posX += 0;
348
+
349
+ // カーテンなし
322
350
 
323
351
  }
324
352
 
@@ -350,11 +378,7 @@
350
378
 
351
379
 
352
380
 
353
- moveTo(backgroundImg,
354
-
355
- (widthOfWindow - backgroundImgSize.width) / 2,
381
+ resizeTo(backgroundImg, widthOfWindow, backgroundImgRatio * widthOfWindow);
356
-
357
- ($(window).height() - backgroundImgSize.height) / 2);
358
382
 
359
383
 
360
384
 
@@ -378,7 +402,7 @@
378
402
 
379
403
  function afterFadingOutBackground() {
380
404
 
381
- // 最左の画像の位置は、画面より画像幅1つ分左
405
+ // 最左の画像の位置は、画面より画像幅1つ分左
382
406
 
383
407
  placeObjects(- widthOfImg, - widthOfLargerImg, true);
384
408
 
@@ -396,7 +420,7 @@
396
420
 
397
421
  // 画像およびカーテンのアニメーション設定
398
422
 
399
- // 最左の画像の位置は画面と同じ
423
+ // 最左の画像の位置は画面と同じ
400
424
 
401
425
  var posX = 0;
402
426
 
@@ -420,7 +444,9 @@
420
444
 
421
445
  slideImgIn(imgs[index].parent(), posX);
422
446
 
423
- // posX += 0; // カーテンなし
447
+ // posX += 0;
448
+
449
+ // カーテンなし
424
450
 
425
451
  }
426
452
 
@@ -458,7 +484,7 @@
458
484
 
459
485
 
460
486
 
461
- /** 画面幅に応じてサイズを(再)計算する
487
+ /** 画面幅に応じて縦横比を(再)計算する
462
488
 
463
489
  * @return 正しく計算 true:できた/false:できなかった
464
490
 
@@ -470,7 +496,7 @@
470
496
 
471
497
 
472
498
 
473
- if (backgroundImgSize == null) {
499
+ if (backgroundImgRatio === null) {
474
500
 
475
501
  // まだ取得できていない時のみ取得
476
502
 
@@ -486,23 +512,23 @@
486
512
 
487
513
  }
488
514
 
489
- backgroundImgSize = { 'width': width, 'height': height };
515
+ backgroundImgRatio = height / width;
490
-
516
+
491
- }
517
+ }
492
-
493
-
494
-
518
+
519
+
520
+
495
- // 画像のもとのサイズを取得
521
+ // 画像のサイズを取得
496
-
522
+
497
- if (imgSizes.length < imgs.length) {
523
+ if (imgRatios.length < imgs.length) {
498
524
 
499
525
  // まだ取得できていない時のみ取得
500
526
 
501
- $.each(imgs, function(index, curImg) {
527
+ $.each(imgs, function(index, current) {
502
-
528
+
503
- var width = curImg.width();
529
+ var width = current.width();
504
-
530
+
505
- var height = curImg.height();
531
+ var height = current.height();
506
532
 
507
533
  if (! width || ! height) {
508
534
 
@@ -512,7 +538,7 @@
512
538
 
513
539
  }
514
540
 
515
- imgSizes[index] = height / width;
541
+ imgRatios[index] = height / width;
516
542
 
517
543
  });
518
544
 
@@ -532,9 +558,15 @@
532
558
 
533
559
  // まだ取得できていない時のみ取得
534
560
 
535
- $.each(texts, function(index, curText) {
561
+ $.each(texts, function(index, current) {
562
+
536
-
563
+ textSizes[index] = {
564
+
565
+ 'width' : current.width(),
566
+
537
- textSizes[index] = { 'width': curText.width(), 'height': curText.height() };
567
+ 'height': current.height()
568
+
569
+ };
538
570
 
539
571
  });
540
572
 
@@ -546,11 +578,15 @@
546
578
 
547
579
  modeIn2Rows = (widthOfWindow < discontinuousWidth);
548
580
 
581
+
582
+
549
583
  widthOfImg = widthOfWindow / (modeIn2Rows ? imgs.length - 1 : imgs.length);
550
584
 
585
+
586
+
551
587
  widthOfLargerImg = widthOfWindow;
552
588
 
553
- heightOfLargerImg = imgSizes[0] * widthOfLargerImg;
589
+ heightOfLargerImg = imgRatios[0] * widthOfLargerImg;
554
590
 
555
591
 
556
592
 
@@ -558,11 +594,13 @@
558
594
 
559
595
  (menu.css('margin-right').replace(/px$/, '') - 0);
560
596
 
597
+ var menuItems = $('.menuItem').size();
598
+
561
599
  widthOfMenu = Math.min(maxWidthOfMenu,
562
600
 
563
- widthOfWindow - borderOfMenu * (imgs.length + 1) + marginOfMenu)
601
+ widthOfWindow - borderOfMenu * (menuItems + 1) + marginOfMenu)
564
-
602
+
565
- widthOfMenuItem = widthOfMenu / imgs.length - 4;
603
+ widthOfMenuItem = widthOfMenu / menuItems - 4;
566
604
 
567
605
 
568
606
 
@@ -658,7 +696,7 @@
658
696
 
659
697
  // 画面幅に合わせて、画像の位置・サイズを再設定する
660
698
 
661
- // 最左の画像の位置は、画面と同じ。カーテンはない
699
+ // 最左の画像の位置は、画面と同じ。カーテンはない
662
700
 
663
701
  placeObjects(0, 0, false);
664
702
 
@@ -672,45 +710,45 @@
672
710
 
673
711
  <body>
674
712
 
675
- <img src="img/Background-Image.jpg" id="backgroundImg">
676
-
677
-
678
-
679
713
  <div id="container">
680
714
 
715
+ <img src="img/Background-Image.jpg" id="backgroundImg">
716
+
717
+
718
+
681
- <div id="imgWrapper1" class="imgWrapper">
719
+ <div class="imgWrapper" id="imgWrapper1">
682
-
720
+
683
- <img src="img/second/02.jpg" id="img1" class="img">
721
+ <img src="img/second/02.jpg" class="img" id="img1">
684
722
 
685
723
  <div class="textOverImg" id="text1">1枚目</div>
686
724
 
687
725
  </div>
688
726
 
689
- <div id="curtain1" class="curtain"></div>
727
+ <div class="curtain" id="curtain1"></div>
690
-
691
-
692
-
728
+
729
+
730
+
693
- <div id="imgWrapper2" class="imgWrapper">
731
+ <div class="imgWrapper" id="imgWrapper2">
694
-
732
+
695
- <img src="img/second/03.jpg" id="img2" class="img">
733
+ <img src="img/second/03.jpg" class="img" id="img2">
696
734
 
697
735
  <div class="textOverImg" id="text2">2枚目 = my tune</div>
698
736
 
699
737
  </div>
700
738
 
701
- <div id="curtain2" class="curtain"></div>
739
+ <div class="curtain" id="curtain2"></div>
702
-
703
-
704
-
740
+
741
+
742
+
705
- <div id="imgWrapper3" class="imgWrapper">
743
+ <div class="imgWrapper" id="imgWrapper3">
706
-
744
+
707
- <img src="img/second/04.jpg" id="img3" class="img">
745
+ <img src="img/second/04.jpg" class="img" id="img3">
708
746
 
709
747
  <div class="textOverImg" id="text3">3枚目 - 777<br>2行目</div>
710
748
 
711
749
  </div>
712
750
 
713
- <div id="curtain3" class="curtain"></div>
751
+ <div class="curtain" id="curtain3"></div>
714
752
 
715
753
  </div>
716
754
 
@@ -722,6 +760,8 @@
722
760
 
723
761
  <div class="menuItem" id="menuItem3">メニュー3</div>
724
762
 
763
+ <div class="menuItem" id="menuItem4">メニュー4</div>
764
+
725
765
  </div>
726
766
 
727
767
  </body>