Contents

การสร้างไทม์ไลน์เชิงโต้ตอบด้วย CSS และ JavaScript

ประเด็นที่สำคัญ

สามารถสร้างไทม์ไลน์ที่น่าสนใจได้อย่างง่ายดายโดยใช้ CSS และ JavaScript

เริ่มต้นด้วยการจัดระเบียบความก้าวหน้าชั่วคราวของเหตุการณ์ผ่านการสร้างโครงสร้าง HTML ที่ครอบคลุมองค์ประกอบต่างๆ เช่น ส่วนหัว ย่อหน้า รูปภาพ และเนื้อหามัลติมีเดียอื่นๆ นอกจากนี้ ใช้ Cascading Style Sheets (CSS) เพื่อมอบคุณสมบัติด้านสุนทรียะให้กับส่วนประกอบเหล่านี้ ดังนั้นจึงสร้างอินเทอร์เฟซที่ดึงดูดสายตาซึ่งจะช่วยปรับปรุงประสบการณ์ผู้ใช้ในขณะที่นำทางไทม์ไลน์

javascript//ตั้งค่าผู้สังเกตการณ์ทางแยกสำหรับไทม์ไลน์ elementconst Observer=new IntersectionObserver(entries=> {entries.forEach(entry=> {//หากมองเห็นองค์ประกอบได้ ให้จางหายไปด้วย CSS transitionif (entry.isIntersecting) {entry.target. classList.add(‘fade-in’);} else {entry.target.classList.remove(‘fade-in’);}});});//เพิ่มคลาส’fade-in’ให้กับองค์ประกอบไทม์ไลน์ทั้งหมด beginningconst timelineItems=document.querySelectorAll(’.timeline__item’);timelineItems.forEach(item=> item.classList.add(‘fade-in’));//สังเกตแต่ละองค์ประกอบไทม์ไลน์const timelineObserved

เส้นเวลาทำหน้าที่เป็นตัวช่วยในการมองเห็นและทำความเข้าใจเหตุการณ์ตามลำดับเหตุการณ์ได้อย่างมีประสิทธิภาพ ค้นพบวิธีสร้างไทม์ไลน์เชิงโต้ตอบผ่านการใช้ CSS และ JavaScript ซึ่งรวมกันเป็นการผสมผสานที่มีประสิทธิภาพในเรื่องนี้

การสร้างโครงสร้างไทม์ไลน์

คุณสามารถตรวจสอบโค้ดเต็มสำหรับโปรเจ็กต์นี้ได้จาก พื้นที่เก็บข้อมูล GitHub

ในการเริ่มต้น จำเป็นต้องสร้างสถาปัตยกรรม HTML ภายในไฟล์ “index.html” สิ่งนี้เกี่ยวข้องกับการแยกแยะเหตุการณ์และการนัดหมายเป็นองค์ประกอบแต่ละรายการ ดังนั้นจึงเป็นพื้นฐานสำหรับไทม์ไลน์ที่เชื่อมโยงถึงกันซึ่งอำนวยความสะดวกในการโต้ตอบของผู้ใช้

 <body>
  <section class="timeline-section">
    <div class="container">
      <div class="Timeline__header">
        <h2>Timeline</h2>

        <p class="heading--title">
          Here is the breakdown of the time we anticipate <br />
          using for the upcoming event.
        </p>
      </div>

      <div class="Timeline__content">
        <div class="Timeline__item">
          <div class="Timeline__text">
            <h3>Occasion 1</h3>

            <p>
              Lorem ipsum dolor sit amet consectetur adipisicing elit.
              Corporis, explicabo.
            </p>

            <span class="circle">1</span>
          </div>

          <h3 class="Timeline__date">12 Dec. 2023</h3>
        </div>

        <div class="Timeline__item">
          <div class="Timeline__text">
            <h3>Occasion 2</h3>

            <p>
              Lorem ipsum dolor sit amet consectetur adipisicing elit.
              Corporis, explicabo.
            </p>

            <span class="circle">2</span>
          </div>

          <h3 class="Timeline__date">12 Dec. 2023</h3>
        </div>
        <!-- More Items -->
      </div>
    </div>
  </section>
</body>

ในปัจจุบัน รูปลักษณ์ของส่วนประกอบของคุณสามารถอธิบายได้ดังนี้:

/th/images/timeline-component-html-structure.jpg

เลือกเค้าโครงสำหรับไทม์ไลน์ของคุณ: แนวตั้งกับแนวนอน

เมื่อสร้างไทม์ไลน์แบบโต้ตอบ เราอาจเลือกใช้การวางแนวในแนวตั้งหรือแนวนอนก็ได้ แบบแรกนำเสนอความสะดวกในการใช้งาน โดยเฉพาะอย่างยิ่งบนอุปกรณ์เคลื่อนที่ เนื่องจากมีความสอดคล้องกับพฤติกรรมการเลื่อนแบบเดิมๆ นอกจากนี้ หากไทม์ไลน์มีข้อมูลมากมาย ก็ถือเป็นเหตุผลที่การกำหนดค่าดังกล่าวจะให้ความสะดวกสูงสุด

ไทม์ไลน์ในแนวนอนดูน่าดึงดูดใจเมื่อแสดงผ่านหน้าจอที่กว้างขวาง โดยเฉพาะอย่างยิ่งในกรณีที่ต้องใช้การเลื่อนด้านข้างเพียงเล็กน้อย สไตล์เหล่านี้เหมาะสำหรับเว็บไซต์สร้างสรรค์ที่มีเนื้อหาที่ต้องการรายละเอียดที่ซับซ้อนน้อยกว่า ในทางกลับกัน ไทม์ไลน์แนวตั้งอาจเหมาะกับแพลตฟอร์มที่มีโครงสร้างหรือมีข้อมูลหนาแน่นมากกว่า ซึ่งจำเป็นต้องมีการเรียกดูอย่างกว้างขวาง ทางเลือกระหว่างสองทางเลือกนี้ท้ายที่สุดแล้วขึ้นอยู่กับความต้องการและความชอบเฉพาะของทั้งนักออกแบบและผู้ใช้

จัดสไตล์ไทม์ไลน์ด้วย CSS

คือส่วนของเส้นตรง การแสดงโหนด และตัวบ่งชี้เวลา

⭐ เส้น: เส้นแนวตั้งตรงกลางที่สร้างขึ้นโดยใช้ Timeline__content::after องค์ประกอบหลอก ทำหน้าที่เป็นกระดูกสันหลังของไทม์ไลน์ มันถูกจัดสไตล์ด้วยความกว้างและสีเฉพาะ โดยอยู่ในตำแหน่งที่แน่นอนเพื่อให้สอดคล้องกับจุดกึ่งกลางของรายการไทม์ไลน์

 .Timeline__content::after {
  background-color: var(--clr-purple);
  content: "";
  position: absolute;
  left: calc(50%-2px);
  width: 0.4rem;
  height: 97%;
  z-index: -5;
} 

⭐ โหนด: วงกลม ซึ่งจัดสไตล์โดยใช้คลาสวงกลม ทำหน้าที่เป็นโหนดบนไทม์ไลน์ สิ่งเหล่านี้ถูกวางตำแหน่งไว้ที่กึ่งกลางของแต่ละรายการในไทม์ไลน์และมีความแตกต่างทางสายตาด้วยสีพื้นหลัง ซึ่งถือเป็นจุดสำคัญตลอดไทม์ไลน์

 .circle {
  position: absolute;
  background: var(--clr-purple);
  top: 50%;
  left: 50%;
  transform: translate(-50%,-50%);
  max-width: 6.8rem;
  width: 100%;
  aspect-ratio: 1/ 1;
  border-radius: 50%;
  display: flex;
  justify-content: center;
  align-items: center;
  z-index: 3;
  font-size: 1.6rem;
}

⭐ เครื่องหมายวันที่: วันที่ซึ่งจัดรูปแบบโดยใช้คลาส Timeline__date จะแสดงที่ด้านใดด้านหนึ่งของไทม์ไลน์ การวางตำแหน่งจะสลับระหว่างซ้ายและขวาสำหรับแต่ละรายการในไทม์ไลน์ ทำให้เกิดรูปลักษณ์ที่เซและสมดุลตลอดไทม์ไลน์

 .Timeline__text,
.Timeline__date { width: 50%; }
.Timeline__item:nth-child(even) { flex-direction: row-reverse;}

.Timeline_item:nth-child(even) .Timeline_date {
  text-align: right;
  padding-right: 8.3rem;
}

.Timeline_item:nth-child(even) .Timeline_text { padding-left: 8.3rem;}

.Timeline_item:nth-child(odd) .Timeline_text {
  text-align: right;
  align-items: flex-end;
  padding-right: 8.3rem;
}

.Timeline_item:nth-child(odd) .Timeline_date { padding-left: 8.3rem;} 

ตรวจสอบชุดสไตล์ทั้งหมดได้จาก GitHub repo ใน style.css

หลังจากใช้สไตล์ที่จำเป็นกับส่วนประกอบ HTML และ CSS ของหน้าเว็บแล้ว ผลลัพธ์สุดท้ายจะมีลักษณะคล้ายกับเค้าโครงที่มีโครงสร้างที่ดี ดึงดูดสายตาและใช้งานง่าย การออกแบบอาจรวมองค์ประกอบต่างๆ เช่น รูปภาพ กล่องข้อความ ตาราง แบบฟอร์ม และปุ่ม ทั้งหมดนี้จัดเรียงอย่างเป็นระเบียบเพื่ออำนวยความสะดวกในการโต้ตอบของผู้ใช้กับเนื้อหา นอกจากนี้ การใช้โทนสี การพิมพ์ และพื้นที่สีขาวสามารถช่วยสร้างประสบการณ์การมองเห็นที่กลมกลืนสำหรับผู้ใช้ที่เรียกดูเว็บไซต์

/th/images/timeline-component-after-styling.jpg

การสร้างภาพเคลื่อนไหวด้วย JavaScript

หากต้องการทำให้องค์ประกอบนี้มีชีวิตชีวา ให้ใช้ Intersection Observer API เพื่อสร้างภาพเคลื่อนไหวรายการไทม์ไลน์ขณะเลื่อนโดยการรวมข้อมูลโค้ดต่อไปนี้ไว้ในไฟล์ script.js:

ตั้งค่าเริ่มต้น

ขั้นแรก ให้เลือกส่วนประกอบทั้งหมดที่มีแอตทริบิวต์คลาส"Timeline__item"

 const timelineItems = document.querySelectorAll(".Timeline__item");

การจัดสไตล์เริ่มต้นของรายการไทม์ไลน์

ขั้นแรก ให้ตั้งค่าอัลฟ่าของทุกๆ องค์ประกอบให้เป็นศูนย์ ซึ่งจะทำให้มองไม่เห็นองค์ประกอบเหล่านั้น จากนั้นใช้การเปลี่ยน CSS เพื่อให้ได้เอฟเฟกต์การซีดจางที่ราบรื่นดังต่อไปนี้:

 timelineItems.forEach((item) => {
    item.style.opacity = 0;
    item.style.transition = "opacity 0.6s ease-out";
}

ด้วยการรวมสไตล์สำหรับไทม์ไลน์ภายในไฟล์ JavaScript แทนที่จะรวมไว้ในสไตล์ชีต เราจึงสามารถนำการปรับปรุงแบบก้าวหน้าไปใช้ได้อย่างมีประสิทธิภาพ กลยุทธ์นี้ช่วยให้แน่ใจว่าแม้ว่า JavaScript จะทำงานไม่ถูกต้อง แต่โครงสร้างพื้นฐานและเค้าโครงของไทม์ไลน์จะยังคงมองเห็นได้ ดังนั้นจึงช่วยให้ผู้ใช้มีฟังก์ชันการทำงานในระดับหนึ่ง โดยไม่คำนึงถึงปัญหาทางเทคนิคที่อาจเกิดขึ้น

โทรกลับผู้สังเกตการณ์ทางแยก

สร้างฟังก์ชัน fadeInOnScroll ที่ปรับเปลี่ยนความทึบขององค์ประกอบให้เป็นค่าเดียว ทำให้มองเห็นได้เมื่อสัมผัสกับหน้าจอของผู้ดู

 const fadeInOnScroll = (entries, observer) => {
    entries.forEach((entry) => {
        if (entry.isIntersecting) {
            entry.target.style.opacity = 1;
        }
    });
};

ตัวเลือกผู้สังเกตการณ์สี่แยก

กำหนดค่าผู้สังเกตการณ์โดยการตั้งค่าพารามิเตอร์ให้รวมค่าเกณฑ์ที่ 0.1 ซึ่งบ่งชี้ว่าภาพเคลื่อนไหวจะถูกทริกเกอร์เมื่อมองเห็นวัตถุได้ 10%

 const options = {
    root: null,
    rootMargin: "0px",
    threshold: 0.1,
}

การสร้างและการใช้ผู้สังเกตการณ์ทางแยก

สรุปโดยการสร้างอ็อบเจ็กต์ IntersectionObserver ที่รวมพารามิเตอร์ที่ระบุ และผนวกเข้ากับทุกอินสแตนซ์ของส่วนประกอบไทม์ไลน์

 const observer = new IntersectionObserver(fadeInOnScroll, options);

timelineItems.forEach((item) => {
    observer.observe(item);
});

ผลลัพธ์สุดท้ายควรมีลักษณะดังนี้:

เบราว์เซอร์ของคุณไม่รองรับแท็กวิดีโอ

แนวทางปฏิบัติที่ดีที่สุดขององค์ประกอบไทม์ไลน์

แนวปฏิบัติบางประการที่ต้องปฏิบัติตาม ได้แก่:

ปรับปรุงความสามารถในการปรับเปลี่ยนเค้าโครงของคุณโดยนำหลักการออกแบบที่ตอบสนองมาใช้ เปิดใช้งานประสบการณ์ผู้ใช้ที่สม่ำเสมอและไม่สะดุดบนหน้าจอและอุปกรณ์ต่างๆ ผ่านการพิจารณาอย่างรอบคอบเกี่ยวกับสัดส่วน ขนาด ตารางกริดที่ลื่นไหล รูปภาพ ข้อความค้นหาสื่อ และแนวทางที่เน้นอุปกรณ์เคลื่อนที่เป็นอันดับแรก

การใช้เทคนิคการเขียนโปรแกรมที่มีประสิทธิภาพถือเป็นสิ่งสำคัญในการรับประกันประสิทธิภาพแอนิเมชั่นที่ราบรื่น

ใช้องค์ประกอบ HTML ที่เหมาะสมทางความหมาย ตรวจสอบอัตราส่วนคอนทราสต์ที่เหมาะสมที่สุดระหว่างสีข้อความและพื้นหลัง และใช้แอตทริบิวต์ ARIA เพื่อปรับปรุงการเข้าถึงเนื้อหาเว็บโดยรวมของคุณ

ทำให้ไทม์ไลน์ของคุณมีชีวิต: การเดินทางในการออกแบบเว็บไซต์

การสร้างไทม์ไลน์เชิงโต้ตอบนั้นเหนือกว่าการนำเสนอข้อมูลเท่านั้น แต่เกี่ยวข้องกับการสร้างการเผชิญหน้าอันน่าหลงใหลและกระจ่างแจ้งแก่ผู้ชม การใช้สถาปัตยกรรม HTML, ศิลปะ CSS และเทคนิคแอนิเมชัน JavaScript ช่วยให้สามารถพัฒนาไทม์ไลน์ที่น่าดึงดูด ซึ่งไม่เพียงดึงดูดความสนใจของผู้ชมเท่านั้น แต่ยังถ่ายทอดข้อมูลที่สำคัญในลักษณะที่น่าดึงดูดอีกด้วย