スライス画像遷移型スライドショー

 全スライド枚数で等分したスライス画像(このデモではスライド枚数が5枚なので、5等分した画像)を、一枚分のスライドになるように水平に並べ、これを、スライドの切り替え時に表示するタイプのスライドショーである。文章で読むとよくわからないと思うので、サンプル(DEMO)でご覧いただきたい。なお、各スライドのスライス画像は、そのスライドが出現する番手のスライスを使うようにする。

サンプル(DEMO)

用意する画像(このサンプルの場合)

・600*400pxのスライド5枚
・120*400pxのスライス画像各1枚(各スライドの登場番手に相当するスライス)

本サンプル表示用HTML

<div id="stage">
    <div id="photos">
        <ul>
            <li><img src="img9/1.jpg"></li>
            <li><img src="img9/2.jpg"></li>
            <li><img src="img9/3.jpg"></li>
            <li><img src="img9/4.jpg"></li>
            <li><img src="img9/5.jpg"></li>    
        </ul>
    </div>
    <div id="slices">    	
        <ul>
            <li><img src="img9/1s.jpg"><div></div></li>
            <li><img src="img9/2s.jpg"><div></div></li>
            <li><img src="img9/3s.jpg"><div></div></li>
            <li><img src="img9/4s.jpg"><div></div></li>
            <li><img src="img9/5s.jpg"><div></div></li>
        </ul>
    </div>
</div>
<!-- 以下の記述は表示枠の高さ保持のためで68%の値は要調整 -->
<div style="padding-top:68%"></div>

本サンプル表示用CSS

/* 表示枠 */
#stage { position:relative;max-width:600px; }
/* li属性、画像下に生成するスペース除去 */
li { list-style:none; }
li img { display:block; }
/* スライドを全て同じ位置に */
#photos li {
	position:absolute; top:0; left:0;
}
/* スライド画像を伸縮可に */
#photos li img { width:100%; }
/* 各スライドのanimation */
#photos li:nth-child(1) { animation:switchPhotos 30s ease infinite; animation-delay:-0s; }
#photos li:nth-child(2) { animation:switchPhotos 30s ease infinite; animation-delay:-24s; }
#photos li:nth-child(3) { animation:switchPhotos 30s ease infinite; animation-delay:-18s; }
#photos li:nth-child(4) { animation:switchPhotos 30s ease infinite; animation-delay:-12s; }
#photos li:nth-child(5) { animation:switchPhotos 30s ease infinite; animation-delay:-6s; }

@keyframes switchPhotos { 
	0% { opacity:0; }
	5% { opacity:1; }
	20% { opacity:1; }
	25% { opacity:0; }
	100% { opacity:0; }
}

/* 各スライドを上付きに、幅を1/5に */
#slices li {
	position:absolute; top:0;
	width:20%;
}
/* スライス画像を伸縮可に */
#slices li img { width:100%; }
/* 各スライス画像の上に同じサイズで黒いスクリーン(表示時はopacity:0.4)を置く */
#slices li div { width:100%;height:100%;background:#000; position:absolute; top:0; }
/* 各スライス画像の位置決め */
#slices li:nth-child(1) { left:0%; }
#slices li:nth-child(2) { left:20%; }
#slices li:nth-child(3) { left:40%; }
#slices li:nth-child(4) { left:60%; }
#slices li:nth-child(5) { left:80%; }
/* 各スライス画像のanimation */
#slices li:nth-child(1) > img { animation:switchSlices 30s ease infinite; }
#slices li:nth-child(2) > img { animation:switchSlices 30s ease infinite; animation-delay:-24s; }
#slices li:nth-child(3) > img { animation:switchSlices 30s ease infinite; animation-delay:-18s; }
#slices li:nth-child(4) > img { animation:switchSlices 30s ease infinite; animation-delay:-12s; }
#slices li:nth-child(5) > img { animation:switchSlices 30s ease infinite; animation-delay:-36s; }
/* スライス画像にタイミングを合わせて各スクリーンをanimateさせる */
#slices li:nth-child(1) > div { animation:switchScreen 30s ease infinite; }
#slices li:nth-child(2) > div { animation:switchScreen 30s ease infinite; animation-delay:-24s; }
#slices li:nth-child(3) > div { animation:switchScreen 30s ease infinite; animation-delay:-18s; }
#slices li:nth-child(4) > div { animation:switchScreen 30s ease infinite; animation-delay:-12s; }
#slices li:nth-child(5) > div { animation:switchScreen 30s ease infinite; animation-delay:-36s; }

@keyframes switchSlices {
	0% { opacity:0;  }
	5% { opacity:1; }
	15% { opacity:1; }
	20% { opacity:1; }
	25% { opacity:1; }
	30% { opacity:0; }
	40% { opacity:0; }
	45% { opacity:1; }
	50% { opacity:0; }
	60% { opacity:0; }
	65% { opacity:1; }
	70% { opacity:0; }
	80% { opacity:0; }
	85% { opacity:1; }
	90% { opacity:0; }
	100% { opacity:0; }
}

@keyframes switchScreen {
	0% { opacity:0;  }
	5% { opacity:0; }
	15% { opacity:0; }
	20% { opacity:0; }
	25% { opacity:0.4; }
	30% { opacity:0; }
	40% { opacity:0; }
	45% { opacity:0.4; }
	50% { opacity:0; }
	60% { opacity:0; }
	65% { opacity:0.4; }
	70% { opacity:0; }
	80% { opacity:0; }
	85% { opacity:0.4; }
	90% { opacity:0; }
	100% { opacity:0; }
}

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です