Slideshow ด้วย CSS3 และ Javscript รองรับการแสดงผลบนมือถือ ไม่ง้อ JQuery

Slideshow แบบนี้จะเป็นแบบง่ายๆนะครับ โดยมีจุดเด่นที่การใช้ CSS3 ในการทำ Effect และ ใช้ Javascript อีกเล็กน้อยในการควบคุมการแสดงผลของ Slideshow และนอกจากนี้ยังรองรับการใช้งานแบบ Responsive อีกด้วย
<div class="slide_show" id="ss_demo">
    <img src="https://goragod.com/upload/slideshow/1.jpg">
    <img src="https://goragod.com/upload/slideshow/2.jpg">
    <img src="https://goragod.com/upload/slideshow/3.jpg">
</div>

ส่วนแรกจะเป็นส่วนของ HTML โดยที่ Slideshow จะมีรูปภาพทั้งหมดจำนวนกี่รูปก็ได้ตาม tag img แต่สิ่งที่สำคัญคือ รูปภาพทุกรูปที่นำมาใช้ควรมีขนาดเท่าๆกันทั้งหมด เพื่อให้การแสดงผล Slideshow สวยงาม
function playSlideShow(id) {
    function show(n) {
       /* รูปทั้งหมด */
       var imgs = document.getElementById(id).getElementsByTagName('img');
       var l = imgs.length;
       
        /* ถึงรูปสุดท้าย กลับไปรูปแรก */
       n = n == l ? 0 : n;
   
        for (var a = 0; a < l; a++) {
            /* image */
            var img = imgs[a];
            if (a == n) {
                 /* รูปที่ต้องการแสดง */
                 img.className = 'select';
            } else {
                 /* รูปอื่นๆ clear class */
                 img.className = '';
            }
       }

       /* คืนค่ารูปที่กำลังแสดง */
       return n;
    }

    /* แสดงรูปแรก */
    var position = show(0);

    /* จับเวลาเปลี่ยนรูปภาพทุก 3 วินาที  (3*1000ms) */
    window.setInterval(function() {
        /* แสดงรูปถัดไป */
        position = show(position + 1);
    }, 3000);
}
/* แสดง slide show */
playSlideShow('ss_demo');

ถัดมาคือส่วนของ javascript ฟังก์ชั่นที่ทำหน้าที่แสดงผล Slideshow คือ  playSlideShow('ss_demo'); จะเห็นว่ามีการส่งค่า id ของพื้นที่แสดงผล Slideshow (ss_demo) ให้กับฟังก์ชั่น ซึ่งข้อดีคือ การออกแบบฟังก์ชั่นในลักษณะนี้ เราสามารถมี Slideshow กี่ตัวก็ได้โดยใช้ฟังก์ชั่นเดียวกัน เพียงแต่เปลี่ยน id ของ Slodeshow เป็นอันอื่นเท่านั้น
  • ในครั้งแรกที่มีการเรียก Slideshow จะแสดงรูปภาพแรกในทันทีโดยการเรียกฟังก์ชั่น show(0)
  • ฟังก์ชั่น show จะทำหน้าที่วนลูปไปยัง tag img ที่อยู่ภายในทุกตัว โดยที่ tag img ลำดับที่ตรงกับค่าที่ส่งให้ฟังก์ชั่น จะมีการใส่ class select ให้กับ tag นั้นๆ และเช่นเดียวกัน tag img ตัวอื่นๆก็จะถูกกำหนดให้มี class ว่างๆ (หรือไม่มี class)
  • ฟังก์ชั่น show จะคืนค่า ลำดับของ tag img ที่ใส่ class select เนื่องจากหากค่าที่ส่งให้ฟังก์ชั่นเกินกว่า tag ที่มี เช่น เป็นรูปสุดท้าย ค่าที่ส่งกลับจะไปเริ่มต้นที่ 0 ใหม่
  • ฟังก์ชั่น window.setInterval จะทำหน้าที่จับเวลาเพื่อเปลี่ยนรูปภาพถัดไปมาแสดง โดยมีระยะห่างระหว่างแต่ละรูปเป็น 3000ms หรือ 3 วินาทีนั่นเอง โดยเมื่อครบกำหนดจะมีการส่งค่า position + 1 ให้ฟังก์ชั่น show เพื่อแสดงรูปถัดไป
.slide_show {
    position: relative;

    /* responsive */
    display: inline-block;
    width: 100%;
}
.slide_show img {
    position: absolute;
    left: 0;
    top: 0;

    /* responsive image */
    width: 100%;
    max-width: 100%;
    height: auto;
    
    /* speed ของ effect */
    transition: 1s;

    /* fade out*/
    opacity: 0;
}
.slide_show img.select {
    /* fade in  */
    opacity: 1;
}

โค้ดส่วนสุดท้ายคือโค้ด CSS ซึ่งทำหน้าที่ควบคุม Effect และ การแสดงผลแบบ Responsive ในตัวอย่างนี้ Effect ที่ใช้คือ fade in-out (โดยการใช้ opacity) ซึ่งสามารถเปลี่ยนรูปแบบของ Effect เป็นอย่างอื่นได้โดยกำหนดรูปแบบในส่วนที่ผมทำเครื่องหมายไว้
ตัวอย่าง
ผู้เขียน goragod โพสต์เมื่อ 30 พ.ค. 2558 เปิดดู 19,517 ป้ายกำกับ CSS3Javascript
^