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

回答編集履歴

3

一枚の画像の表示時間を10秒程度表示してからフェードアウト

2017/09/12 21:05

投稿

naomi3
naomi3

スコア1105

answer CHANGED
@@ -45,6 +45,9 @@
45
45
  > 2.1枚目の画像は拡大、2枚目の画像は縮小するように交互に拡大、縮小をスライドするにはどうすればいいでしょうか。
46
46
 
47
47
  交互に拡大、縮小をスライドするようにしました。
48
+
49
+ これでいいでしょうか?
50
+ マシントラブルと勘違いによりはまってしまいました。すみません。
48
51
  ```HTML
49
52
  <!DOCTYPE html>
50
53
  <html lang="ja">
@@ -72,6 +75,7 @@
72
75
  position: absolute;
73
76
  top: 0;
74
77
  display: none;
78
+ z-index: 1;
75
79
  }
76
80
 
77
81
  .down {
@@ -127,28 +131,28 @@
127
131
  }
128
132
 
129
133
  var slide = $('.slideshow');
130
- var itemIndex = 0;
134
+ var itemIndex = 0, prevItemIndex;
131
135
  var classes = ['up', 'down'];
132
- var closeClasses = ['closeUp', 'closeDown'];
136
+ var classesClosing = ['closeUp', 'closeDown'];
133
137
  var upOrDown = 0;
134
138
 
135
139
  // ページの読み込み時にスライドの1枚目を2000ミリ秒かけてフェードイン
136
140
  slide.find('.item').eq(itemIndex).fadeIn(2000).addClass(classes[1 - upOrDown]);
137
141
 
138
- // スライドの枚数を調べて変数に格納
142
+ // スライドの枚数を調べて、最後のインデックスを変数に格納
139
- var total = $('.slideshow .item').length -1;
143
+ var lastItemIndex = $('.slideshow .item').length - 1;
140
144
 
141
145
  // 処理を繰り返す
142
146
  setInterval(function() {
143
147
  setTimeout(function() {
144
148
  // 1000ミリ秒後に3500ミリ秒かけてフェードインする
145
149
  slide.find('.item').eq(itemIndex).fadeIn(3500).addClass(classes[1 - upOrDown])
146
- .removeClass(closeClasses[1 - upOrDown]).removeClass(classes[upOrDown]);
150
+ .removeClass(classesClosing[1 - upOrDown]).removeClass(classes[upOrDown]);
147
151
  }, 1000);
148
152
 
149
153
  prevItemIndex = itemIndex;
150
154
 
151
- if (itemIndex < total) {
155
+ if (itemIndex < lastItemIndex) {
152
156
  itemIndex++;
153
157
  }
154
158
  else {
@@ -159,11 +163,11 @@
159
163
  upOrDown = 1 - upOrDown;
160
164
 
161
165
  // 4500ミリ秒かけてフェードアウトする
162
- slide.find('.item').eq(prevItemIndex).fadeOut(4500).addClass(closeClasses[1 - upOrDown])
166
+ slide.find('.item').eq(prevItemIndex).fadeOut(4500).addClass(classesClosing[1 - upOrDown])
163
- .removeClass(classes[1 - upOrDown]).removeClass(closeClasses[upOrDown]);
167
+ .removeClass(classes[1 - upOrDown]).removeClass(classesClosing[upOrDown]);
164
168
 
165
169
  // この値を変更すると、処理の間隔を遅くしたり早くしたりできる
166
- }, 4500);
170
+ }, 16000);
167
171
  });
168
172
 
169
173
  </script>

2

かなりスムーズに、交互に拡大、縮小をスライドするように修正

2017/09/12 21:05

投稿

naomi3
naomi3

スコア1105

answer CHANGED
@@ -38,3 +38,146 @@
38
38
  ```
39
39
  交互に行うFIXは調査中です。
40
40
 
41
+ > 2.最終スライドのあと、トップに戻るスライドがスムーズになりません。
42
+
43
+ これでかなりスムーズになったと思います。
44
+
45
+ > 2.1枚目の画像は拡大、2枚目の画像は縮小するように交互に拡大、縮小をスライドするにはどうすればいいでしょうか。
46
+
47
+ 交互に拡大、縮小をスライドするようにしました。
48
+ ```HTML
49
+ <!DOCTYPE html>
50
+ <html lang="ja">
51
+ <head>
52
+ <meta charset="UTF-8">
53
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
54
+ <meta http-equiv="X-UA-Compatible" content="ie=edge">
55
+ <title></title>
56
+ <style>
57
+ * {
58
+ margin: 0;
59
+ padding: 0;
60
+ }
61
+
62
+ .slideshow {
63
+ position: relative;
64
+ width: 70%;
65
+ padding-top: 70%;
66
+ overflow: hidden;
67
+ margin: 0 auto;
68
+ }
69
+
70
+ .slideshow .item {
71
+ width: 100%;
72
+ position: absolute;
73
+ top: 0;
74
+ display: none;
75
+ }
76
+
77
+ .down {
78
+ -webkit-transform: scale(1);
79
+ transform: scale(1);
80
+ z-index: 2;
81
+ }
82
+
83
+ .up {
84
+ -webkit-transform: scale(1.25);
85
+ transform: scale(1.25);
86
+ z-index: 1;
87
+ }
88
+
89
+ .closeDown {
90
+ -webkit-transform: scale(1);
91
+ transform: scale(1);
92
+ -webkit-transition: 4s;
93
+ transition: 4s;
94
+ z-index: 1;
95
+ }
96
+
97
+ .closeUp {
98
+ -webkit-transform: scale(1.25);
99
+ transform: scale(1.25);
100
+ -webkit-transition: 4s;
101
+ transition: 4s;
102
+ z-index: 2;
103
+ }
104
+
105
+ .mask {
106
+ position: absolute;
107
+ width: 100%; /* 指定しないと0になる */
108
+ height: 100%; /* 指定しないと0になる */
109
+ top: 610px; /* はみ出してはいけない、上からの高さ */
110
+ background-color: white; /* 背景と同じ色 */
111
+ z-index: 3; /* 最も手前(最大値) */
112
+ }
113
+
114
+ </style>
115
+ <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
116
+
117
+ <script>
118
+ function isBrowserIE() {
119
+ return navigator.userAgent.toLowerCase().indexOf('trident') >= 0;
120
+ }
121
+
122
+
123
+ $(window).load(function(){
124
+ if (isBrowserIE()) {
125
+ var maskTop = $('.mask').css('top').replace(/px$/, '') - 34;
126
+ $('.mask').css('top', maskTop);
127
+ }
128
+
129
+ var slide = $('.slideshow');
130
+ var itemIndex = 0;
131
+ var classes = ['up', 'down'];
132
+ var closeClasses = ['closeUp', 'closeDown'];
133
+ var upOrDown = 0;
134
+
135
+ // ページの読み込み時にスライドの1枚目を2000ミリ秒かけてフェードイン
136
+ slide.find('.item').eq(itemIndex).fadeIn(2000).addClass(classes[1 - upOrDown]);
137
+
138
+ // スライドの枚数を調べて変数に格納
139
+ var total = $('.slideshow .item').length -1;
140
+
141
+ // 処理を繰り返す
142
+ setInterval(function() {
143
+ setTimeout(function() {
144
+ // 1000ミリ秒後に3500ミリ秒かけてフェードインする
145
+ slide.find('.item').eq(itemIndex).fadeIn(3500).addClass(classes[1 - upOrDown])
146
+ .removeClass(closeClasses[1 - upOrDown]).removeClass(classes[upOrDown]);
147
+ }, 1000);
148
+
149
+ prevItemIndex = itemIndex;
150
+
151
+ if (itemIndex < total) {
152
+ itemIndex++;
153
+ }
154
+ else {
155
+ itemIndex = 0;
156
+ }
157
+
158
+ // 反転
159
+ upOrDown = 1 - upOrDown;
160
+
161
+ // 4500ミリ秒かけてフェードアウトする
162
+ slide.find('.item').eq(prevItemIndex).fadeOut(4500).addClass(closeClasses[1 - upOrDown])
163
+ .removeClass(classes[1 - upOrDown]).removeClass(closeClasses[upOrDown]);
164
+
165
+ // この値を変更すると、処理の間隔を遅くしたり早くしたりできる
166
+ }, 4500);
167
+ });
168
+
169
+ </script>
170
+ </head>
171
+
172
+ <body>
173
+ <h1 class="title"></h1>
174
+ <div class="slideshow">
175
+ <img class="item" src="img1.jpg" alt="">
176
+ <img class="item" src="img2.jpg" alt="">
177
+ <img class="item" src="img3.jpg" alt="">
178
+ <!-- div.slideshow の中にマスク -->
179
+ <div class="mask"></div>
180
+ </div>
181
+ </body>
182
+ </html>
183
+ ```

1

IEでもはみ出さないように修正

2017/08/28 14:58

投稿

naomi3
naomi3

スコア1105

answer CHANGED
@@ -17,4 +17,24 @@
17
17
  background-color: white; /* 背景と同じ色 */
18
18
  z-index: 3; /* 最も手前(最大値) */
19
19
  }
20
- ```
20
+ ```
21
+
22
+ 綺麗なやり方ではないのですが、次のように書きかえるとIEでもはみ出さなくなります。
23
+ (IEでのちらつき阻止はまだです。)
24
+ ```JavaScript
25
+ $(window).load(function(){
26
+ ```
27
+
28
+ ```JavaScript
29
+ function isBrowserIE() {
30
+ return navigator.userAgent.toLowerCase().indexOf('trident') >= 0;
31
+ }
32
+
33
+ $(window).load(function(){
34
+ if (isBrowserIE()) {
35
+ var maskTop = $('.mask').css('top').replace(/px$/, '') - 34;
36
+ $('.mask').css('top', maskTop);
37
+ }
38
+ ```
39
+ 交互に行うFIXは調査中です。
40
+