うわー!もう今月終わりそう!
というわけで、Scala の学習のほうはここひと月ほど滞っているんだけど、代わりに(?)今日は、HTML と JavaScript でタイトルに書いたようなことをやってみる。
jQuery を使ってスライドショーを実現するライブラリはいろいろあるんだけど、今日はそういうのは使わないでやる。さらには、jQuery 自体も使わないでやる。やるって言ったらやる。
さて、まずは jQuery 利用バージョン。いくつかの Web ページを参考に書いた(というかほぼコピペ)のがこれ。
<!DOCTYPE html> <html> <head> <title>Fade images</title> <link rel="stylesheet" href="style.css" /> <script src="../lib/jquery-3.4.1.min.js"></script> <script type="text/javascript"> $(function() { const $width = 960; const $height = 540; const $interval = 3000; const $fade_speed = 1000; $("#slide ul li").css({"position": "absolute", "overflow": "hidden", "width": $width, "height": $height}); $("#slide ul li").hide(); $("#slide ul li:first").addClass("active").show(); setInterval(function() { let $active = $("#slide ul li.active"); let $next = $active.next("li").length ? $active.next("li") : $("#slide ul li:first"); $active.fadeOut($fade_speed).removeClass("active"); $next.fadeIn($fade_speed).addClass("active"); }, $interval); }); </script> </head> <body> <div id="slide"> <ul> <li><a href=""><img src="img/img1.jpg" width="960" heght="540"/></a></li> <li><a href=""><img src="img/img2.jpg" width="960" heght="540"/></a></li> <li><a href=""><img src="img/img3.jpg" width="960" heght="540"/></a></li> <li><a href=""><img src="img/img4.jpg" width="960" heght="540"/></a></li> </ul> </div> </body> </html>
これで、3秒ごとにフェードアウト/フェードインしながら画像が切り替わる。画像は4つ用意したけど、最後まで行ったら元に戻る。
つぎ。jQuery なしバージョン。さらにいくつかのページを参考に、試行錯誤した結果がこれ。
<!DOCTYPE html> <html> <head> <title>Fade images</title> <link rel="stylesheet" href="style.css" /> <script type="text/javascript"> function fadeIn(el, speed) { el.style.transition = speed; el.style.opacity = "1"; } function fadeOut(el, speed) { el.style.transition = speed; el.style.opacity = "0"; } function slide() { const width = "960px"; const height = "540px"; const interval = 3000; // miliseconds const fade_speed = "1.0s"; const slide = document.querySelectorAll("#slide ul li"); for (let i =0; i < slide.length; i++) { slide[i].style.position = "absolute"; slide[i].style.overflow = "hidden"; slide[i].style.width = width; slide[i].style.height = height; slide[i].style.display = "block"; slide[i].style.opacity = "0"; } const first = slide[0]; first.classList.add("active"); first.style.opacity = "1"; setInterval(function() { let active = document.querySelector("#slide ul li.active"); let next = active.nextElementSibling || first; fadeOut(active, fade_speed) active.classList.remove("active"); fadeIn(next, fade_speed) next.classList.add("active"); }, interval); } document.addEventListener("DOMContentLoaded", slide); </script> </head> <body> <div id="slide"> <ul> <li><a href=""><img src="img/img1.jpg" width="960" heght="540"/></a></li> <li><a href=""><img src="img/img2.jpg" width="960" heght="540"/></a></li> <li><a href=""><img src="img/img3.jpg" width="960" heght="540"/></a></li> <li><a href=""><img src="img/img4.jpg" width="960" heght="540"/></a></li> </ul> </div> </body> </html>
動作は同じ。
最近の流れとしては jQuery 使わないっていうのがあるみたいだけど、やっぱ使ったほうが楽ではあるよなあ。